将高度绑定到另一个向后工作的控件

时间:2017-04-03 04:42:58

标签: c# wpf

我有以下代码:

代码背后的代码:

public MainWindow()
{
    InitializeComponent();
    DispatcherTimer timer = new DispatcherTimer();
    timer.Interval = new TimeSpan(0, 0, 5);
    timer.Tick += Timer_Tick;
    timer.Start();
}

private void Timer_Tick(object sender, EventArgs e)
{
    List<ItemType> list = new List<ItemType>();
    list.Add(new ItemType() { typeId = 263, typeName = "Test A" });
    list.Add(new ItemType() { typeId = 264, typeName = "Test B" });
    itemTreeView.ItemsSource = list;
}

XAML:

<TreeView DockPanel.Dock="Bottom" x:Name="itemTreeView" Margin="0">
   <TreeView.Resources>
        <DataTemplate DataType="{x:Type local:ItemType}">
            <StackPanel Orientation="Horizontal">
                 <Image Source="{Binding typeImage}" Height="{Binding ActualHeight, ElementName=tname, Mode=OneWay}"/>
                 <TextBlock Text="{Binding ActualHeight, ElementName=tname}"/>
                 <TextBlock x:Name="tname" Text="{Binding typeName}"  ToolTip="{Binding description}"/>
             </StackPanel>
         </DataTemplate>
    </TreeView.Resources>

它在早期开发中运行良好,但现在我正在更加努力地推动事情,只要它更频繁地更新,绑定似乎会向后工作,将ActualHeight的{​​{1}}更改为图像的高度。我添加TextBlock部分认为可能有助于防止这种情况,但它仍在发生。我最终得到的图像和面板高度为64像素,一般看起来是16(我不想设置一个固定的值,以防用户设置更大的字体大小。它似乎停止缩小第二个图像重装。 对typeImage的绑定将绑定到64x64 Mode="OneWay

1 个答案:

答案 0 :(得分:0)

我能够通过向VerticalAlignment="Top"添加<TextBlock x:Name="tname" Text="{Binding typeName}" ToolTip="{Binding description}"/>来解决此问题,以防止在首先加载图片时文本块被拉伸。