- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 RibbonWindow,其中我的 WindowStyle 设置为 None,所以我不明白 Grip 发生了什么来调整窗口大小?!即使我的控件底部的 Margin 设置为 0 也会被隐藏......这是一种奇怪的行为。
但是如果我更改控件的底部边距就可以了,但是无论如何都看不到 Grip,可能是因为部分客户区被隐藏了......
我不得不说,如果有一个 WPF 窗口,这不会发生,它只会发生在 RibbonWindow 上。我正在使用 RibbonWindow,因为 Ribbon 在正确的窗口中有其他外观。
那么我该怎么做才能解决 Grip 的问题呢?
我的一些代码...
<rib:RibbonWindow x:Class="MyApp.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:rib="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
AllowsTransparency="True"
Background="Transparent"
Height="750"
ResizeMode="CanResizeWithGrip"
Width="1000"
WindowStartupLocation="CenterScreen"
WindowStyle="None">
<Grid Margin="0, 0, 0, 20">
<Border Background="Black"
CornerRadius="5"
Opacity="0.5"/>
</Grid>
</rib:RibbonWindow>
最佳答案
这对调试很有趣。结果是窗口的样式有一个bug:如果系统定义为IsGlassEnabled == true
(在 Win7 Aero 主题中使其成为 true
)然后窗口依赖于 Microsoft.Windows.Shell.WindowChrome(来自 Microsoft.Windows.Shell 程序集)来绘制窗口的边框和顶部按钮;而这个 WindowChrome 有它的 GlassFrameThickness
属性设置为 8,30,8,8
结合 NonClientFrameEdges
设置为 Bottom
.
发生的事情是因为 AllowsTransparency == true
玻璃边框是透明的,但由于 WindowChrome
窗口仍然从整体窗口尺寸中“削减”其厚度定义 NonClientFrameEdges="Bottom"
,从而切割 ResizeGrip
从 View 。
如果您(疯狂地)将窗口拖到屏幕上,您可以看到这一点 - 您将看到 ResizeGrip
闪烁。
为了解决这个问题,我们需要定义一个新的 WindowChrome
与 NonClientFrameEdges="None"
(或 GlassFrameThickness = 0
或两者)并仅在 IsGlassEnabled == true && AllowsTransparency == true
时才将其分配给窗口(我正在使用 App.xaml 中定义的应用程序资源并仅定义 NonClientFrameEdges="None"
):
1. Add these namespaces to App.xaml:
xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
xmlns:ribbonPrimitives="clr-namespace:Microsoft.Windows.Controls.Ribbon.Primitives;assembly=RibbonControlsLibrary"
xmlns:shell="clr-namespace:Microsoft.Windows.Shell;assembly=Microsoft.Windows.Shell"
2. Add these resources:
<ribbonPrimitives:RibbonWindowSmallIconConverter x:Key="RibbonWindowSmallIconConverter" />
<shell:WindowChrome x:Key="WindowChromeWithGlassAndTransparency"
NonClientFrameEdges="None" />
<Style x:Key="MyStyle"
TargetType="{x:Type ribbon:RibbonWindow}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsGlassEnabled, Source={x:Static shell:SystemParameters2.Current}}"
Value="True" />
<Condition Binding="{Binding AllowsTransparency, RelativeSource={RelativeSource Mode=Self}}"
Value="False" />
</MultiDataTrigger.Conditions>
<Setter Property="shell:WindowChrome.WindowChrome"
Value="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type ribbon:Ribbon}, ResourceId=WindowChromeAeroWithGlass}}" />
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsGlassEnabled, Source={x:Static shell:SystemParameters2.Current}}"
Value="True" />
<Condition Binding="{Binding AllowsTransparency, RelativeSource={RelativeSource Mode=Self}}"
Value="True" />
</MultiDataTrigger.Conditions>
<Setter Property="shell:WindowChrome.WindowChrome"
Value="{DynamicResource WindowChromeWithGlassAndTransparency}" />
</MultiDataTrigger>
<DataTrigger Binding="{Binding Path=IsGlassEnabled, Source={x:Static shell:SystemParameters2.Current}}"
Value="True">
<!--This is the original setter of the chrome that makes all the trouble-->
<!--<Setter Property="shell:WindowChrome.WindowChrome"
Value="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type ribbon:Ribbon}, ResourceId=WindowChromeAeroWithGlass}}" />-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ribbon:RibbonWindow}">
<Grid>
<Border Name="PART_ClientAreaBorder"
Background="{TemplateBinding Control.Background}"
BorderBrush="{TemplateBinding Control.BorderBrush}"
BorderThickness="{TemplateBinding Control.BorderThickness}"
Margin="{Binding Path=WindowNonClientFrameThickness, Source={x:Static shell:SystemParameters2.Current}}" />
<Border BorderThickness="{Binding Path=(shell:WindowChrome.WindowChrome).ResizeBorderThickness, RelativeSource={RelativeSource TemplatedParent}}">
<Grid>
<Image Name="PART_Icon"
shell:WindowChrome.IsHitTestVisibleInChrome="True"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Source="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Icon, Converter={StaticResource RibbonWindowSmallIconConverter }}"
Width="{Binding Path=SmallIconSize.Width, Source={x:Static shell:SystemParameters2.Current}}"
Height="{Binding Path=SmallIconSize.Height, Source={x:Static shell:SystemParameters2.Current}}" />
<AdornerDecorator>
<ContentPresenter Name="PART_RootContentPresenter" />
</AdornerDecorator>
<ResizeGrip Name="WindowResizeGrip"
shell:WindowChrome.ResizeGripDirection="BottomRight"
HorizontalAlignment="Right"
VerticalAlignment="Bottom"
Visibility="Collapsed"
IsTabStop="False" />
</Grid>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Value="{x:Null}"
Property="Icon">
<Setter TargetName="PART_Icon"
Property="Source"
Value="/RibbonControlsLibrary;component/Images/GlassyDefaultSystemIcon.png" />
</Trigger>
<Trigger Property="WindowState"
Value="Maximized">
<Setter TargetName="PART_Icon"
Property="Margin"
Value="0,2,0,0" />
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="ResizeMode"
Value="CanResizeWithGrip" />
<Condition Property="WindowState"
Value="Normal" />
</MultiTrigger.Conditions>
<Setter TargetName="WindowResizeGrip"
Property="Visibility"
Value="Visible" />
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
3. In your window use the new style:
<rib:RibbonWindow ....
Style="{StaticResource MyStyle}">
....
</rib:RibbonWindow>
DataTrigger
几乎和原始样式一样,只有一个修改:我已经评论了 WindowChrome 的 setter 。
MultiDataTrigger
s 是我的补充。他们检查
AllowsTransparency
的值属性并应用正确的 WindowChrome: 如果值为
false
,则为原始值和一个
NonClientFrameEdges="None"
(您也可以使用
GlassFrameThickness = 0
代替)如果值为
true
.
ResizeGrip
完成。 .
关于WPF RibbonWindow 不显示 Grip 以调整窗口大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7945699/
在嵌套的 WPF ToolBarPanel-ToolBar-Menu 中,我们希望摆脱左侧的握柄和右侧的溢出区域。它们都是灰色的,但我们希望它们根本不显示。 关于如何实现这一目标有什么想法吗? 以防万
我有一个带有单个 ToolStripStatusLabel、Spring=true 和通知背景色的 StatusStrip。 问题是状态条右侧有一个丑陋的灰色方 block 。摆弄了一会儿后,我意识到
我想在 Windows 窗体窗体上有一个调整大小指示(与有状态栏时相同的调整大小控制)。我不想向表单添加状态栏 - 这会破坏表单的设计。 表单内部可以有各种停靠(填充)控件。除了在每个控件的右下角绘制
我有一个 RibbonWindow,其中我的 WindowStyle 设置为 None,所以我不明白 Grip 发生了什么来调整窗口大小?!即使我的控件底部的 Margin 设置为 0 也会被隐藏..
我想使用基本握法。但我不知道在哪里可以改变它的位置。现在,如果您查看我的图片,您可以看到我禁用了边框并为主矩形添加了一些阴影。我想保持这种状态。 不知道这个"ResizeMode="CanResize
我在WPF应用程序中使用工具栏。据我了解,没有简单的方法可以使其 float 。我只想删除不希望显示的元素:ToolBar左侧的几个点。是否有任何可自定义工具栏 View 的属性?或者,也许可以重新定
我有一个包含嵌入式 youtube 视频的页面,我正在尝试实现自定义覆盖,您可以在其中使用可调整大小和可拖动的 定义区域。 (使用 JQuery 用户界面)。 拖动 时在屏幕的其他区域,它的响应速
我正在尝试弄清楚如何处理向 Twitter Bootstrap MEDIA GRID 元素添加“字幕”。这是一个例子:http://jsfiddle.net/vXMMA/73/ 您会注意到“长”标题使
我个人认为标题很明确,如果没有,我会尝试更多。仅适用于 Windows 的托管解决方案,不适用于 Linux。如您所知,方法“getchar()”仅在键盘按键按下“Enter”后读取。 Linux 上
我是 opencv 的新手,想了解更多。这是我的管道: import cv2 import numpy import math from enum import Enum class GripPipe
我是一名优秀的程序员,十分优秀!