Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Wpf如何基于变量动态渲染按钮_C#_Wpf_Xaml - Fatal编程技术网

C# Wpf如何基于变量动态渲染按钮

C# Wpf如何基于变量动态渲染按钮,c#,wpf,xaml,C#,Wpf,Xaml,如果Url不为空,我希望能够显示超链接,否则我不希望显示链接 我该怎么办?这是到目前为止我的代码。我的列表框模板示例: <ListBox.ItemTemplate> <DataTemplate> <StackPanel Background="#CD85C9E9" Name="spListItem" Orientation="Horizontal"

如果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>
两种选择:

  • 编写自定义值转换器,根据对象是否为null将对象(本例中为Url)转换为可见性,并在可见性属性上设置:

  • 使用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>
    
    String
    是引用类型,因此已经可以为空。

    两个选项:

  • 编写自定义值转换器,根据对象是否为null将对象(本例中为Url)转换为可见性,并在可见性属性上设置:

  • 使用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>
    

    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一个类似于你使用触发器的束,这个字符串的大小是空的。你的评论让我读到了更多关于触发器的内容,比如你使用触发器来升级这个…字符串,它的大小是空的。你的评论让我读了更多关于触发器的内容