WPF绑定问题
我正在尝试自定义WPF绑定问题,wpf,binding,treeview,actualwidth,Wpf,Binding,Treeview,Actualwidth,我正在尝试自定义TreeView控件。当用户在TreeView中选择项目时,我需要将SelectedItem的实际宽度存储在项目的标签中: <Style x:Key="{x:Type TreeViewItem}" TargetType="{x:Type TreeViewItem}"> <!-- ... --> <Setter Property="Template"> <Set
TreeView
控件。当用户在TreeView
中选择项目时,我需要将SelectedItem
的实际宽度
存储在项目的标签中:
<Style x:Key="{x:Type TreeViewItem}" TargetType="{x:Type TreeViewItem}">
<!-- ... -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TreeViewItem}">
<Grid ShowGridLines="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Rectangle x:Name="rect" />
<ContentPresenter x:Name="PART_Header" ContentSource="Header" Margin="5" />
<ItemsPresenter x:Name="ItemsHost" Grid.Row="1" Grid.Column="1" />
<!-- ... -->
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Tag" Value="{Binding ElementName=rect, Path=ActualWidth}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
现在的问题是item.Tag总是空的。这是我的装订有问题吗?还是应该用另一种方式做呢?试试:
<Setter Property="Tag" Value="{Binding Path=ActualWidth, RelativeSource={x:Static RelativeSource.Self}}" />
尝试在输出窗口中查找数据绑定错误没有报告任何数据绑定错误。显然,按ElementName:,这是不可能的。并且没有“FindVisualChildByType”标记扩展。因此,您需要另一种解决方法。您试图解决什么问题?我正在尝试将TreeViewItem内容的宽度存储到项目的Tag属性中。要做到这一点,我需要存储矩形'rect'的实际宽度或第一列定义的实际宽度。这一个可以工作,但它没有提供我需要的值--它绑定到项的实际宽度,这等于它将被放置的树视图的宽度。如果我想要项目内容的实际宽度,我需要将其绑定到矩形“rect”或第一列定义。
<Setter Property="Tag" Value="{Binding Path=ActualWidth, RelativeSource={x:Static RelativeSource.Self}}" />