我有DataGrid
包含一些工作。
每项工作的内容都显示在RowDetails
。
我遇到了多个问题:
问题:为什么Image
上的ToggleButton
仅显示在Selected
和最后一行?
这是我的xaml
:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ToggleButton IsChecked="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Path=DetailsVisibility, Converter={StaticResource BoolToVisConverter}, Mode=TwoWay}">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content">
<Setter.Value>
<Image Source="..\Resources\ic_expand_less_48px.png" Height="16" Width="16" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsChecked" Value="{x:Null}">
<Setter Property="Content">
<Setter.Value>
<Image Source="..\Resources\ic_expand_more_48px.png" Height="16" Width="16" />
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Content">
<Setter.Value>
<Image Source="..\Resources\ic_expand_more_48px.png" Height="16" Width="16" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
答案 0 :(得分:1)
当Style使用UIElement for Content属性(在本例中为Image)时,它会创建该元素的单个实例。当Style应用于多个控件时,其中只有一个显示Content,因为UIElement不能有多个父级。
这就是为什么在大多数情况下使用自定义模板的原因。 ToggleButton具有ContentTemplate属性来自定义内容部分的外观:(其他两个触发器的代码相同)
<Trigger Property="IsChecked" Value="False">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Image Source="..\Resources\ic_expand_more_48px.png" Height="16" Width="16" />
</DataTemplate>
</Setter.Value>
</Setter>
</Trigger>
我知道另一种使用非共享资源的方法:
<Image x:Key="ExpandMoreImg" x:Shared="False"
Source="..\Resources\ic_expand_more_48px.png" Height="16" Width="16" />
<Trigger Property="IsChecked" Value="False">
<Setter Property="Content" Value="{StaticResource ExpandMoreImg}"/>
</Trigger>
Shared设置为false,每次使用都会有一个Image实例