1

リンクボタンを表示する ListView があります。「FileAddress」文字列に値がある場合にのみ表示するリンク ボタンが必要です。それ以外の場合は、タイトルを含む単純な TextBlock を表示する必要があります。

<GridViewColumn.CellTemplate>
    <DataTemplate>
        <Button Style="{StaticResource LinkButton}" Height="23" Content="{Binding Path=Title}" />
    </DataTemplate>
</GridViewColumn.CellTemplate>

どんなアイデアでも大歓迎です。

ティア。

4

2 に答える 2

2

「gridview」はwpfの単純なコンポーネントだと思います。このタイプの変更を実行するのは少し不器用です。

3つの異なるアプローチを行うことができます。

1) GridViewColumn.CellTemplateSelector(http://www.switchonthecode.com/tutorials/wpf-tutorial-how-to-use-a-datatemplateselector) を使用
しますが、=(

2)必要に応じて動作するUserControlを作成します。
それは適切で比較的簡単なようです

3)トリガーを使用してボタンのスタイルを変更します。

         <Button.Style>
            <Style TargetType="Button">
                <Style.Triggers>
                    <Trigger Property="Content" Value="{x:Null}">
                        <!-- Changes -->
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>

また

             <Style TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="Button">
                            <Grid>
                                <!-- Template -->
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger Property="Content" Value="{x:Null}">
                                    <!-- Changes -->
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

トリガーを使用する場合には制限があります。xamlをいじるのが比較的簡単で簡単であることがわかっている場合は、ボタンの新しいテンプレートを作成しなければならないことがあります。

サンプル(ここにボタンがあり、彼の画像を変更しています):

 <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
                    <Image x:Name="imgBackground" Source="{StaticResource UpArrowImageNormal}" Stretch="None"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter TargetName="imgBackground"
                                Property="Source" Value="{StaticResource UpArrowImageIsPressed}"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter TargetName="imgBackground" Property="Source" Value="{StaticResource UpArrowImageDisabled}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
于 2012-06-26T03:20:27.027 に答える
0

次のコンバーターを使用できます

[ValueConversion(typeof(Object), typeof(Visibility))]
public class NullVisibilityConv : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null) return Visibility.Collapsed;
        else return Visibility.Visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }

}

次に、次のxamlを使用してコントロールにバインドできます

<GridViewColumn.CellTemplate>
    <DataTemplate>
        <Button Style="{StaticResource LinkButton}" Height="23" Content="{Binding Path=Title}"
                Visibility="{Binding FileAddress, Converter={StaticResource NullToVisConverter}}"/>
    </DataTemplate>
</GridViewColumn.CellTemplate>

また、xamlのどこかでコンバーターをリソースとして宣言する必要があります

<converters:NullVisibilityConv x:Key="NullToVisConverter" />

このアプローチの利点は、コードでコンバーターを宣言すると、トリガーや他の複雑なコードを追加せずに、他のバインディングで再利用できることです。可視性バインディングでそのコンバーターを使用するだけです。

于 2012-06-26T03:25:14.143 に答える