【问题标题】:Button visibility depending on two properties (OR not AND)按钮可见性取决于两个属性(或非 AND)
【发布时间】:2016-01-14 21:56:46
【问题描述】:

我在 WPF 中有一个按钮,如果鼠标位于按钮所在的边框上,我想让它可见。这很简单:

                    <Button Grid.Column="1" Click="DimFilter_Click" Style="{StaticResource ImageButton}" MouseDown="Button_MouseDown"
                            Visibility="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border}}, Path=IsMouseOver, Converter={StaticResource BoolToVis}}">
                        <Button.Content>
                            <Image Source="{Binding FilterActive, Converter={StaticResource FilterImageConverter}}"
                                   HorizontalAlignment="Center" VerticalAlignment="Center"/>
                        </Button.Content>
                    </Button>

我的问题是,如果“FilterActive”属性为真,我还想让按钮可见。 因此,如果“FilterActive”为假,我想在上面的代码中使用 MouseOver 绑定,但如果“FilterActive”为真,则 Button 应该一直可见,忽略第一个绑定。 这有可能吗?

【问题讨论】:

  • 你可以使用 MultiBinding。
  • Clemens,多重绑定可以让一个属性(FilterActive)优先于另一个属性(MouseOver)吗?如果没有,也许唯一的方法是通过代码隐藏。

标签: wpf button data-binding visibility multibinding


【解决方案1】:

好吧,我明白了,笨蛋。

<Button.Visibility>
    <MultiBinding Converter="{StaticResource ButtonVisConverter}">
          <Binding Path="FilterActive"/>
          <Binding RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type Border}}" Path="IsMouseOver"/>
     </MultiBinding>
</Button.Visibility>

转换器中的代码几乎是不言自明的

【讨论】:

    【解决方案2】:

    您可以使用触发器而不是绑定:

    <Button Grid.Column="1" 
            Click="DimFilter_Click" 
            MouseDown="Button_MouseDown">                     
        <Button.Style>
            <Style BasedOn="{StaticResource ImageButton}" TargetType="Button">
    
                <Setter Property="Visibility" Value="Collapsed" />
    
                <Style.Triggers>                              
                    <DataTrigger Binding="{Binding FilterActive}" Value="True">
                        <Setter Property="Visibility" Value="Visible" />
                    </DataTrigger>
    
                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Border}}, Path=IsMouseOver, Converter={StaticResource BoolToVis}}" Value="True">
                        <Setter Property="Visibility" Value="Visible" />
                    </DataTrigger>                                  
                </Style.Triggers>
    
            </Style>
        </Button.Style>
        <Button.Content>
            <Image Source="{Binding FilterActive, Converter={StaticResource FilterImageConverter}}"
                        HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Button.Content>
    </Button>
    

    【讨论】:

      猜你喜欢
      • 2017-11-28
      • 2020-05-07
      • 2019-08-05
      • 2015-08-09
      • 2012-06-15
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-02-28
      相关资源
      最近更新 更多