1

我有一个显示链接按钮的 ListView。我只需要链接按钮来显示“FileAddress”字符串是否有值。否则,它应该显示一个带有 Title 的简单 TextBlock。

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

任何想法,将不胜感激。

TIA。

4

2 回答 2

2

我认为“gridview”是 wpf 的一个简单组件。进行这种类型的更改有点笨拙。

您可以采用三种不同的方法:

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