7

いくつかの行を持つデータグリッドがあります。すべての行にはDeleteRowボタンがあります。選択した行のみにこのボタンが表示されます。私が見ているように、少なくとも2つの解決策があるかもしれません:

a)ボタンのVisibility-propertyを含むDatGridRowのIsSelected-propertyにバインドする

また

b)ボタンのトリガーを使用して、含まれている行が選択されている場合にのみ表示されます。

これは私がオプションbのために持っているコードですが、機能していません:

<DataGridTemplateColumn Width="50">
<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <Button Content="X" Tag="{Binding}" Click="DeletRow_Click" Visibility="Hidden">
            <Button.Style>
                <Style x:Name="ButtonVisibility">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow}},Path=IsSelected}" Value="True">
                            <Setter Property= "Button.Visibility" Value="Visible"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>

たぶん本当に簡単ですが、私はずっと見つめていました。今は目がくらんでいます:S

ありがとう

4

2 に答える 2

12

依存関係プロパティ値の優先順位のため、機能しません。内のローカル値を変更することはできませんStyle。に移動Visibility.HiddenするStyleと、機能します。

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <Button Content="X" Tag="{Binding}" Click="DeletRow_Click">
            <Button.Style>
                <Style x:Name="ButtonVisibility">
                    <Setter Property="Button.Visibility" Value="Hidden"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Path=IsSelected}" Value="True">
                            <Setter Property="Button.Visibility" Value="Visible"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
于 2012-09-06T14:23:01.890 に答える
2

WPFが提供するコンバーターを使用してBooleanToVisibiltyConverter、ボタンの表示を切り替えることができます-

<DataGrid>
            <DataGrid.Resources>
                <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
            </DataGrid.Resources>
            <DataGrid.Columns>
                <DataGridTemplateColumn Width="50">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button Content="X" Tag="{Binding}"
                                    Visibility="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter},
                                                    RelativeSource={RelativeSource FindAncestor, AncestorType=DataGridRow}}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
于 2012-09-06T17:39:59.870 に答える