C# Wpf如何基于变量动态渲染按钮
如果Url不为空,我希望能够显示超链接,否则我不希望显示链接 我该怎么办?这是到目前为止我的代码。我的列表框模板示例:C# Wpf如何基于变量动态渲染按钮,c#,wpf,xaml,C#,Wpf,Xaml,如果Url不为空,我希望能够显示超链接,否则我不希望显示链接 我该怎么办?这是到目前为止我的代码。我的列表框模板示例: <ListBox.ItemTemplate> <DataTemplate> <StackPanel Background="#CD85C9E9" Name="spListItem" Orientation="Horizontal"
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Background="#CD85C9E9"
Name="spListItem"
Orientation="Horizontal"
HorizontalAlignment="Stretch">
<Label>
<TextBlock Text="{Binding Name}" />
<!-- How to define if Url Is Null -->
<Hyperlink Name="MyLink" Click="MyLink_Click" />
</Label>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
两种选择:
<Hyperlink Name="MyLink" Click="MyLink_Click">
<Hyperlink.Style>
<Style TargetType="Hyperlink">
<Style.Triggers>
<DataTrigger Binding="{Binding Url}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Hyperlink.Style>
</Hyperlink>
String
是引用类型,因此已经可以为空。两个选项:
<Hyperlink Name="MyLink" Click="MyLink_Click">
<Hyperlink.Style>
<Style TargetType="Hyperlink">
<Style.Triggers>
<DataTrigger Binding="{Binding Url}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Hyperlink.Style>
</Hyperlink>
String
是一种引用类型,因此已经可以为空。我建议您遵循MVVM模式,以便所有业务逻辑细节都由ViewModel封装(或者至少将其保存在代码中,而不是复杂的视图触发器中,等等)
所以基本上你可以公开属性
public bool IsUrlProvided { get; private set; }
它封装了所有知道正确URL格式详细信息的逻辑,并且在视图中仅将可见性绑定到此标志usng BooleanToVisibilityConverter
<Button Visibility="{Binding IsUrlProvided,
Converter={StaticResource BooleanToVisibilityConverter}}" />
通过这种方式,您不需要在每次逻辑更改时都更改视图,我建议您遵循MVVM模式,以便所有业务逻辑细节都由ViewModel封装(或者至少将其保存在代码中,而不是复杂的视图触发器等) 所以基本上你可以公开属性
public bool IsUrlProvided { get; private set; }
它封装了所有知道正确URL格式详细信息的逻辑,并且在视图中仅将可见性绑定到此标志usng BooleanToVisibilityConverter
<Button Visibility="{Binding IsUrlProvided,
Converter={StaticResource BooleanToVisibilityConverter}}" />
通过这种方式,您不需要每次更改视图,因为逻辑会以简单的方式更改。。不知道为什么我没有想到……:)这是一种简单的方法。。不知道为什么我没有想到……:)thnx一个类似于你使用触发器的束,这个字符串的大小是空的。你的评论让我读到了更多关于触发器的内容,比如你使用触发器来升级这个…字符串,它的大小是空的。你的评论让我读了更多关于触发器的内容