Проблема привязки данных в WPF - PullRequest
2 голосов
/ 10 мая 2011

У меня есть сетка внутри холста на вкладке.Сетка содержит большое растровое изображение, я (пытался) привязать размер сетки к размеру вкладки, а также располагать поле в пять пикселей вокруг сетки.

imageTab.cs

    public ImageTab(SendInfo sendInfo, int numImge, int numAccs)
    {
        imageDisplay = new ImageDisplay(sendInfo, numImge, numAccs);
        imageDisplay.ClipToBounds = true;
        CreateCanvas();
    }

    private void CreateCanvas()
    {
        Canvas canvas = new Canvas();
        canvas.Children.Add(imageDisplay);
        this.AddChild(canvas);
    }

ImageDisplay.xaml

<UserControl x:Class="MyProj.ImageDisplay">

      <Grid Margin="5,5,5,5" Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=TabControl, AncestorLevel=1}, Path=ActualHeight}">
          <Image/>
      </Grid>

</UserControl>

Сетка отрывается от нижней части области вкладки, в результате чего нижняя часть изображения обрезается.Есть ли проблема с моим связыванием данных, нужно ли применять к нему какое-либо смещение?(размер вкладки - 10 пикселей для поля?)

1 Ответ

1 голос
/ 10 мая 2011

Вам вообще не нужно устанавливать свойство Height (также следует понимать, что делать это неправильно, поскольку оно есть у вас, когда вы рассматриваете 5-пиксельное поле, т. Е. Оно будет отключено на 10 пикселей).

Просто оставьте VerticalAlignment и HorizontalAlignment в их значениях по умолчанию (то есть Stretch), чтобы получить эффект, которого вы добиваетесь здесь.

Попробуйте это на новом Window, чтобы понять, что я имею в виду:

<Window x:Class="WpfApplication9.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="438" Width="587" Background="Pink">
    <Grid Background="Black"  Margin="5">

    </Grid>
</Window>

Сетка здесь будет черной и всегда будет растягиваться по размеру окна, используя 5-пиксельное поле, которое вы увидите, потому что задний цвет окна розовый.

...