【问题标题】:Checking the value of the window's "WindowState" in a Trigger在触发器中检查窗口“WindowState”的值
【发布时间】:2011-01-12 16:03:45
【问题描述】:

在 WPF 中,有没有办法在触发器中检查窗口的“WindowState”属性?我试过使用“0”、“Minimized”和“WindowState.Minimized”的值。

示例:

<Window.Triggers>
    <Trigger Property="WindowState" Value="Minimized">
        <Setter Property="ShowInTaskBar" Value="False" />
    </Trigger>
</Window.Triggers>

【问题讨论】:

    标签: c# wpf triggers windowstate


    【解决方案1】:

    或者,如果您希望窗口以外的控件响应 WindowState 属性,您可以改用 DataTrigger:

    <DataTrigger Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}" 
                 Value="Normal">
       <Setter Property="Fill" Value="Green"/>
    </DataTrigger>
    

    【讨论】:

      【解决方案2】:

      像这样工作:

      <Window.Style>
          <Style TargetType="Window">
              <Style.Triggers>
                  <Trigger Property="WindowState" Value="Minimized">
                      <Setter Property="ShowInTaskbar" Value="False" />
                  </Trigger>
              </Style.Triggers>
          </Style>
      </Window.Style>
      

      编辑:您需要将触发器放在Window.Style

      【讨论】:

      • 谢谢,救命恩人!我用它来稍微增加边框大小以避免在窗口最大化时边框消失。
      【解决方案3】:

      当窗口最大化时如何增加边框厚度的示例。否则,由于 WindowChrome 的怪异,边框会消失。

      这个例子也去掉了标准的窗口标题,所以你必须添加你自己的最小化/最大化/关闭按钮。

      <Window ResizeMode="CanResizeWithGrip"
              WindowStyle="SingleBorderWindow">
          <!-- Remove window header and border. Use with ResizeMode="CanResizeWithGrip" and WindowStyle="SingleBorderWindow". -->
          <WindowChrome.WindowChrome>
              <WindowChrome     
                  CaptionHeight="1"  
                  CornerRadius ="0"
                  ResizeBorderThickness="4"         
                  GlassFrameThickness="0">
              </WindowChrome>
          </WindowChrome.WindowChrome>            
          <Border BorderThickness="1">     
              <Border.Style>
                  <Style TargetType="{x:Type Border}">
                      <Style.Triggers>
                          <!-- Add to avoid border disappearing when window is maximised -->
                          <DataTrigger Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}" 
                                       Value="Maximized">
                              <Setter Property="Margin" Value="10"/>
                          </DataTrigger>
                          <DataTrigger Binding="{Binding WindowState, RelativeSource={RelativeSource AncestorType=Window}}" 
                                       Value="Normal">
                              <Setter Property="Margin" Value="0"/>
                          </DataTrigger>
                      </Style.Triggers>
                  </Style>
              </Border.Style>
              <Grid>
                 <!-- Window XAML here. -->
              <Grid>
           </Border>
       </Window>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-18
        相关资源
        最近更新 更多