我有一个包含网格的WPF应用程序。网格分为3列,第3个网格在加载时宽度为零。
我在另外两列中有两个数据网格。当其中一个数据网格中的所选项目发生更改时,其他数据网格会更改其显示值,即主详细信息模板。一切正常。
数据网格中有一个值,如果选中,我希望第3列将其宽度从零更改为2 *。我不知道该怎么做?
我希望通过XAML实现这一目标。我一直在关注数据触发器&价值转换器。我在下面快速编写了一些代码进行测试。我已经读过将列设置为width = 0,依赖项属性设置优先级列表中可能更高。无论如何要做到这一点还是我需要使用代码?
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="0"/>
</Grid.ColumnDefinitions>
<DataGrid Grid.Column="0"
ItemsSource="{Binding OrderList}"
SelectedItem="{Binding OrderSelected}"
AutoGenerateColumns="True">
</DataGrid>
<TextBox Grid.Column="1" Text="{Binding OrderSelected.Name}">
</TextBox>
<Grid x:Name="columnHideSeek" Grid.Column="2" Background="Blue">
<Grid.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding OrderSelected.Name}" Value="Mark">
<Setter Property="Grid.Width" Value="10"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
</Grid>
</Grid>
答案 0 :(得分:22)
使用正确的DataTrigger
,这是完全可能的。首先,将Trigger
添加到您要更改的UI元素... ColumnDefinition
,而不是Grid
:
<ColumnDefinition>
<ColumnDefinition.Style>
<Style TargetType="{x:Type ColumnDefinition}">
<Setter Property="Width" Value="10" />
<Style.Triggers>
<DataTrigger Binding="{Binding OrderSelected.Name}" Value="Mark">
<Setter Property="Width" Value="2*" />
</DataTrigger>
</Style.Triggers>
</Style>
</ColumnDefinition.Style>
</ColumnDefinition>
接下来,请勿在{{1}}元素上设置Width
,而应在ColumnDefinition
中设置Style
。否则,Width
元素上的ColumnDefinition
将覆盖DataTrigger
设置的值。