目前,我有以下数据触发器:
<Style TargetType="Button">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=ScheduleDataGrid, Path=HasItems}"
Value="false">
<Setter Property="Button.IsEnabled" Value="false"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
我有两个按钮,可以在数据网格中添加/删除一行
<Button Name="BtnAddPoint" Content="Add" Width="70" Margin="10 0 10 0" Click="BtnAddSchedule_Click"></Button>
<Button Name="BtnDeletePoint" Content="Delete" Width="70" Click="BtnDeleteSchedule_Click"></Button>
我有两个问题。
目前,当我只想要禁用删除按钮时,上面的触发器会禁用这两个按钮。将setter的targetname设置为delete按钮不起作用。我可以将触发器定位到特定按钮吗?
另外,我希望删除按钮仅在选择网格项时启用,而不是检查项目计数。这可能吗?
答案 0 :(得分:2)
如果要将Style
分配给适当的按钮,则应使用<Style x:Key="DeleteButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Button.IsEnabled" Value="True" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=ScheduleDataGrid, Path=SelectedItem}" Value="{x:Null}">
<Setter Property="Button.IsEnabled" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
:
BtnDeletePoint
在<Button Name="BtnAddPoint" Content="Add" Width="70" Margin="10 0 10 0" Click="BtnAddSchedule_Click"></Button>
<Button Name="BtnDeletePoint" Content="Delete" Width="70" Click="BtnDeleteSchedule_Click" Style="{StaticResource DeleteButtonStyle}"></Button>
按钮中,您应添加样式:
HasItems
您可以编写触发器并检查SelectedItem
是否为空,而不是检查SelectedItem
并编写另一个触发器来检查网格是否已选择项目。如果网格包含项目,并且用户选择了其中一项,则{{1}}属性会为您提供信息。
答案 1 :(得分:0)
如果两个Button
共享相同的Style
因此具有相同的Trigger
,那么它们将在相同的情况下被禁用(在这种情况下,当{ {1}}有0个项目。)
为了在不同情况下禁用删除DataGrid
,您需要创建一个具有不同Button
的单独Style
,并将该样式应用于BtnDeletePoint。由于我没有看到您在按钮声明中设置Trigger
,我猜测触发器属于Style
的隐式样式,因此您需要指定Button
}到新样式,以便您可以将其分配给删除按钮:
x:Key
对于仅选择单个项目时启用删除按钮的触发器,如果您不想使用<Style x:Key="DeleteButtonStyle" TargetType="Button">
<!-- Setters -->
<!-- Triggers -->
</Style>
<Button Name="BtnDeletePoint" Style="{DynamicResource DeleteButtonStyle}" Content="Delete" Width="70" Click="BtnDeleteSchedule_Click"/>
上Count
属性的SelectedItems
,那么您需要使用DataGrid
来确定网格的选择状态 - 我知道的Converter
上没有其他DependencyProperties
可以为您提供该信息。
另外,如果没有更多的代码,我不确定上下文,但在这种情况下你不相信你想要DataGrid
- 你应该对标准DataTrigger
没问题。< / p>