禁用时,WPF按钮更改Rectangle.OpacityMask

时间:2015-04-21 13:19:20

标签: c# wpf xaml

我无法为我的问题管理解决方案。

这是我的按钮

<Button BorderBrush="Black" IsDefault="True" IsEnabled="{Binding ContentManager.CanPreview}" x:Name="Preview" Grid.Column="1" Style="{DynamicResource MetroCircleButtonStyle}">
    <Button.ToolTip>
        <ToolTip>
            <StackPanel>
                <TextBlock FontWeight="Bold">Preview</TextBlock>
                <TextBlock>Preview the selected document</TextBlock>
            </StackPanel>
        </ToolTip>
    </Button.ToolTip>
    <Rectangle Margin="1,0,0,0" Width="17" Height="12" Fill="Black">
        <Rectangle.OpacityMask>
            <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_eye}" />
        </Rectangle.OpacityMask>
        <Rectangle.Style>
            <Style>
                <Style.Triggers>
                </Style.Triggers>
            </Style>
        </Rectangle.Style>
    </Rectangle>
</Button>

我的问题当按钮未启用时,如何设置触发器以更改<VisualBrush Stretch="Fill" Visual="{StaticResource appbar_eye}" />

2 个答案:

答案 0 :(得分:3)

创建定位Style课程的Rectangle,将OpacityMask移至Style Setter,否则Style.Trigger不会成为Trigger能够更改本地值,并在IsEnabled属性上创建OpacityMask为false,将Brush更改为其他<Rectangle Margin="1,0,0,0" Width="17" Height="12" Fill="Black"> <Rectangle.Style> <Style TargetType="{x:Type Rectangle}"> <Setter Property="OpacityMask"> <Setter.Value> <VisualBrush Stretch="Fill" Visual="{StaticResource appbar_eye}" /> </Setter.Value> </Setter> <Style.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="OpacityMask"> <Setter.Value> <!-- other brush --> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> </Rectangle.Style> </Rectangle>

{{1}}

答案 1 :(得分:1)

也许将其他视觉画笔作为资源添加到您的usercontrol / window / app

<Style.Resources>
            <VisualBrush x:Key="otherBrush" Stretch="Fill"  Visual="{StaticResource other_appbar_eye}" ></VisualBrush>

并在触发器中使用它

<Rectangle.Style>
    <Style TargetType="Rectangle">
         <Style.Triggers>
              <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="OpacityMask" Value="{StaticResource otherBrush}"/>
              </Trigger>
          </Style.Triggers>
     </Style>
 </Rectangle.Style>

并将默认值移动到样式,因为否则无法通过触发器更改它。