Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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# 如何使用Prism/WPF/MahApps隐藏按钮的背景?_C#_Wpf_Prism - Fatal编程技术网

C# 如何使用Prism/WPF/MahApps隐藏按钮的背景?

C# 如何使用Prism/WPF/MahApps隐藏按钮的背景?,c#,wpf,prism,C#,Wpf,Prism,我正在通过Brian Lagunas的PluralSight教程学习如何使用Prism,因为我仍然希望掌握使用MVVM的概念 当通过上面的复选框启用时,我有一个看起来不错的按钮: 但是,当通过Prism的委托命令不再启用按钮时,我会在按钮周围看到一个窗口 禁用按钮时,如何删除该框?我想改为改变前景,使齿轮图标为灰色,但现在将决定删除该框 下面是StackPanel和我尝试的代码 XAML代码: <StackPanel HorizontalAlignment="Left&quo

我正在通过Brian Lagunas的PluralSight教程学习如何使用Prism,因为我仍然希望掌握使用MVVM的概念

当通过上面的
复选框启用时,我有一个看起来不错的按钮:

但是,当通过Prism的委托命令不再启用
按钮时,我会在按钮周围看到一个窗口

禁用
按钮
时,如何删除该框?我想改为改变前景,使齿轮图标为灰色,但现在将决定删除该框

下面是
StackPanel
和我尝试的代码

XAML代码:

<StackPanel HorizontalAlignment="Left" Orientation="Vertical">
   <CheckBox Content="CanExecute" IsChecked="{Binding CanExecute}"></CheckBox>
   <Button  Command="{Binding ClickCommand}" Background="#a9afb8" Height="35" Width="35" BorderThickness="0" ToolTip=" Marks the current work order as complete.">
      <Button.Style>
         <Style TargetType="Button">
            <Style.Triggers>
               <Trigger Property="IsEnabled" Value="True">
                  <Setter Property="Background" Value="#a9afb8"></Setter>
               </Trigger>
            </Style.Triggers>
         </Style>
      </Button.Style>
      <iconPacks:Unicons Width="35" Height="35" Kind="Cog" />
   </Button>
   <TextBlock Text="{Binding Title}"></TextBlock>
</StackPanel>

该问题与MVVM无关。WPF中的控件有一个在XAML中定义的视觉和逻辑结构,以及状态和触发器,用于这些状态在状态更改时更改控件属性。这是在控件模板中定义的

如果是
按钮
,则会出现按下、鼠标悬停或禁用等状态。所有这些状态都具有视觉表示。例如,在禁用状态下,
背景将变为浅灰色,不透明度降低。控件模板中的触发器优先于样式中定义的触发器,因此需要创建自定义控件模板以更改禁用状态的表示形式

由于创建自定义控件模板可能很复杂,因此应复制默认控件模板或控件样式并进行调整。请注意,默认模板可能因使用的库而异。对于MahApps.Metro,您可以找到默认的按钮样式和模板

您感兴趣的部分是禁用状态的触发器

如果你想改变其他州,你也可以用同样的方法。这就是整个风格:

<Style x:Key="MyButtonStyle" TargetType="{x:Type ButtonBase}">
   <Setter Property="Background" Value="{DynamicResource MahApps.Brushes.Gray10}" />
   <Setter Property="BorderBrush" Value="{DynamicResource MahApps.Brushes.Button.Border}" />
   <Setter Property="BorderThickness" Value="1" />
   <Setter Property="Controls:ControlsHelper.ContentCharacterCasing" Value="Upper" />
   <Setter Property="Controls:ControlsHelper.CornerRadius" Value="3" />
   <Setter Property="Controls:ControlsHelper.FocusBorderBrush" Value="{DynamicResource MahApps.Brushes.Button.Border.Focus}" />
   <Setter Property="Controls:ControlsHelper.FocusBorderThickness" Value="2" />
   <Setter Property="Controls:ControlsHelper.MouseOverBorderBrush" Value="{DynamicResource MahApps.Brushes.Button.Border.MouseOver}" />
   <Setter Property="FontFamily" Value="{DynamicResource MahApps.Fonts.Family.Button}" />
   <Setter Property="FontSize" Value="{DynamicResource MahApps.Font.Size.Button}" />
   <Setter Property="FontWeight" Value="Bold" />
   <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.ThemeForeground}" />
   <Setter Property="MinHeight" Value="25" />
   <Setter Property="Padding" Value="5 6" />
   <Setter Property="SnapsToDevicePixels" Value="True" />
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="{x:Type ButtonBase}">
            <Grid>
               <Controls:ClipBorder x:Name="Border"
                                             Background="{TemplateBinding Background}"
                                             BorderBrush="{TemplateBinding BorderBrush}"
                                             BorderThickness="{TemplateBinding BorderThickness}"
                                             CornerRadius="{TemplateBinding Controls:ControlsHelper.CornerRadius}"
                                             SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
               <Controls:ClipBorder x:Name="DisabledVisualElement"
                                             Background="{DynamicResource MahApps.Brushes.Control.Disabled}"
                                             CornerRadius="{TemplateBinding Controls:ControlsHelper.CornerRadius}"
                                             IsHitTestVisible="False"
                                             Opacity="0"
                                             SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
               <Controls:ContentControlEx x:Name="PART_ContentPresenter"
                                                   Margin="{TemplateBinding BorderThickness}"
                                                   Padding="{TemplateBinding Padding}"
                                                   HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                   VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                                                   Content="{TemplateBinding Content}"
                                                   ContentCharacterCasing="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Controls:ControlsHelper.ContentCharacterCasing)}"
                                                   ContentStringFormat="{TemplateBinding ContentStringFormat}"
                                                   ContentTemplate="{TemplateBinding ContentTemplate}"
                                                   ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"
                                                   RecognizesAccessKey="{TemplateBinding Controls:ControlsHelper.RecognizesAccessKey}"
                                                   SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
            </Grid>
            <ControlTemplate.Triggers>
               <Trigger Property="IsMouseOver" Value="True">
                  <Setter TargetName="Border" Property="Background" Value="{DynamicResource MahApps.Brushes.Gray8}" />
                  <Setter TargetName="Border" Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Controls:ControlsHelper.MouseOverBorderBrush), Mode=OneWay}" />
               </Trigger>
               <Trigger Property="IsPressed" Value="True">
                  <Setter TargetName="Border" Property="Background" Value="{DynamicResource MahApps.Brushes.Gray7}" />
               </Trigger>
               <Trigger Property="IsKeyboardFocusWithin" Value="True">
                  <Setter TargetName="Border" Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Controls:ControlsHelper.FocusBorderBrush), Mode=OneWay}" />
                  <Setter TargetName="Border" Property="BorderThickness" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Controls:ControlsHelper.FocusBorderThickness), Mode=OneWay}" />
               </Trigger>
               <Trigger Property="IsEnabled" Value="False">
                  <Setter Property="Foreground" Value="LightGray"/>
               </Trigger>
            </ControlTemplate.Triggers>
         </ControlTemplate>
      </Setter.Value>
   </Setter>
</Style>

如果您想了解更多关于控件状态和结构的信息,可以参考MSDN上的文档,例如
按钮
。但是,这些示例可能不完整或有点过时。

Background=“Transparent”
?还有
Background=“Transparent”
too@PanagiotisKanavos谢谢,没错。然而,由于原始海报对在特定状态下更改前景感兴趣,我想给出一个全面的答案,解释正在发生的事情,这也适用于默认控件模板,其触发器可能覆盖
Background
属性,这种方法不适用的地方。标题是
隐藏背景。我猜这是XY问题的另一个例子。。。询问预期的解决方案,而不是实际问题
<Trigger Property="IsEnabled" Value="False">
   <Setter TargetName="DisabledVisualElement" Property="Opacity" Value="0.7" />
   <Setter TargetName="PART_ContentPresenter" Property="Opacity" Value="0.3" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
   <Setter Property="Foreground" Value="LightGray"/>
</Trigger>
<Style x:Key="MyButtonStyle" TargetType="{x:Type ButtonBase}">
   <Setter Property="Background" Value="{DynamicResource MahApps.Brushes.Gray10}" />
   <Setter Property="BorderBrush" Value="{DynamicResource MahApps.Brushes.Button.Border}" />
   <Setter Property="BorderThickness" Value="1" />
   <Setter Property="Controls:ControlsHelper.ContentCharacterCasing" Value="Upper" />
   <Setter Property="Controls:ControlsHelper.CornerRadius" Value="3" />
   <Setter Property="Controls:ControlsHelper.FocusBorderBrush" Value="{DynamicResource MahApps.Brushes.Button.Border.Focus}" />
   <Setter Property="Controls:ControlsHelper.FocusBorderThickness" Value="2" />
   <Setter Property="Controls:ControlsHelper.MouseOverBorderBrush" Value="{DynamicResource MahApps.Brushes.Button.Border.MouseOver}" />
   <Setter Property="FontFamily" Value="{DynamicResource MahApps.Fonts.Family.Button}" />
   <Setter Property="FontSize" Value="{DynamicResource MahApps.Font.Size.Button}" />
   <Setter Property="FontWeight" Value="Bold" />
   <Setter Property="Foreground" Value="{DynamicResource MahApps.Brushes.ThemeForeground}" />
   <Setter Property="MinHeight" Value="25" />
   <Setter Property="Padding" Value="5 6" />
   <Setter Property="SnapsToDevicePixels" Value="True" />
   <Setter Property="Template">
      <Setter.Value>
         <ControlTemplate TargetType="{x:Type ButtonBase}">
            <Grid>
               <Controls:ClipBorder x:Name="Border"
                                             Background="{TemplateBinding Background}"
                                             BorderBrush="{TemplateBinding BorderBrush}"
                                             BorderThickness="{TemplateBinding BorderThickness}"
                                             CornerRadius="{TemplateBinding Controls:ControlsHelper.CornerRadius}"
                                             SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
               <Controls:ClipBorder x:Name="DisabledVisualElement"
                                             Background="{DynamicResource MahApps.Brushes.Control.Disabled}"
                                             CornerRadius="{TemplateBinding Controls:ControlsHelper.CornerRadius}"
                                             IsHitTestVisible="False"
                                             Opacity="0"
                                             SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
               <Controls:ContentControlEx x:Name="PART_ContentPresenter"
                                                   Margin="{TemplateBinding BorderThickness}"
                                                   Padding="{TemplateBinding Padding}"
                                                   HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
                                                   VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
                                                   Content="{TemplateBinding Content}"
                                                   ContentCharacterCasing="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Controls:ControlsHelper.ContentCharacterCasing)}"
                                                   ContentStringFormat="{TemplateBinding ContentStringFormat}"
                                                   ContentTemplate="{TemplateBinding ContentTemplate}"
                                                   ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"
                                                   RecognizesAccessKey="{TemplateBinding Controls:ControlsHelper.RecognizesAccessKey}"
                                                   SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
            </Grid>
            <ControlTemplate.Triggers>
               <Trigger Property="IsMouseOver" Value="True">
                  <Setter TargetName="Border" Property="Background" Value="{DynamicResource MahApps.Brushes.Gray8}" />
                  <Setter TargetName="Border" Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Controls:ControlsHelper.MouseOverBorderBrush), Mode=OneWay}" />
               </Trigger>
               <Trigger Property="IsPressed" Value="True">
                  <Setter TargetName="Border" Property="Background" Value="{DynamicResource MahApps.Brushes.Gray7}" />
               </Trigger>
               <Trigger Property="IsKeyboardFocusWithin" Value="True">
                  <Setter TargetName="Border" Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Controls:ControlsHelper.FocusBorderBrush), Mode=OneWay}" />
                  <Setter TargetName="Border" Property="BorderThickness" Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=(Controls:ControlsHelper.FocusBorderThickness), Mode=OneWay}" />
               </Trigger>
               <Trigger Property="IsEnabled" Value="False">
                  <Setter Property="Foreground" Value="LightGray"/>
               </Trigger>
            </ControlTemplate.Triggers>
         </ControlTemplate>
      </Setter.Value>
   </Setter>
</Style>
<Button Style="{StaticResource MyButtonStyle}" ...>
   <iconPacks:Unicons Width="35" Height="35" Kind="Cog" />
</Button>