0

目前,我有以下数据触发器:

<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>

我有两个问题。

目前,当我只想禁用删除按钮时,上述触发器会禁用这两个按钮。将设置器的目标名称设置为删除按钮不起作用。我可以将触发器作为特定按钮的目标吗?

另外,我希望仅在选择网格项目而不是检查项目计数时才启用删除按钮。这可能吗?

4

2 回答 2

2

Style如果要将其分配给适当的按钮,则应使用with key:

<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属性为您提供网格是否有项目以及用户是否选择其中之一的信息。

于 2013-07-13T13:40:25.083 回答
0

如果两个Buttons 共享相同Style并因此具有相同的Trigger,那么它们都将在相同的情况下被禁用(在这种情况下,当sDataGrid有 0 个项目时)。

为了Button在不同的情况下禁用删除,您需要创建一个单独Style的具有不同Trigger的样式并将该样式应用于 BtnDeletePoint。由于我没有看到您Style在按钮的声明中设置 ,我猜触发器属于隐式样式 for Button,因此您需要将 an 分配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,则需要使用 aConverter来确定网格的选择状态-有DependencyPropertiesDataGrid我所知,没有其他人会为您提供该信息。

此外,如果没有更多代码,我不确定上下文,但不要相信DataTrigger在这种情况下你想要 a - 你应该可以使用标准Trigger.

于 2013-07-13T13:39:57.380 回答