c# - Wpf如何根据变量动态渲染按钮

标签 c# wpf xaml

如果 Url 不为空,我希望能够显示超链接,否则我不希望显示链接。

我该怎么办?到目前为止,这是我的代码。我的列表框模板示例:

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

我的类(class):

public class MyList
{
    public string Name{get;set;}
    public string? Url{get;set;}
}

最佳答案

两种选择:

  1. 编写自定义值转换器以根据对象(在本例中为您的 Url)是否为 null 将其转换为 Visibility,并将其设置在 Visibility 属性上:

  2. 使用 DataTrigger 将可见性设置为 false。

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

第二个更冗长,但可以完全在 xaml 中完成。但是,在第一种情况下,您最终将不止一次使用自定义转换器。

顺便说一句

public string? Url{get;set;}

String 是一个引用类型,因此已经可以为 null。

关于c# - Wpf如何根据变量动态渲染按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7914270/

相关文章:

c# - 使用 LINQ 将元素附加到集合

.net - Caliburn Micro Capture 鼠标位置

wpf - 在 wpf 应用程序中嵌入 word 2010 编辑器

c# - BitmapSource 作为图像控件的源

c# - Visual Studio - 将应用程序制作成可执行文件?

xaml - 在 WinRT/Windows 应用商店应用程序中安全地存储加密 key

c# - MarkupExtension 声明中的默认构造函数参数

silverlight - 在 XAML 中创建投影样式

c# - 快速回收字符串内存(RAM 有限的设备)

c# - System.Windows.Control.RichTextBox 中的错误