1

我的WPF 自定义控件 MyBaseWindow的Theme/ Generic.xaml如下所示:

<Style TargetType="{x:Type MyBaseWindowPath:MyBaseWindow}">
        …
        <Setter Property="WindowChrome.WindowChrome">
            <Setter.Value>
                <WindowChrome CaptionHeight="{Binding ActualHeight, ElementName=HeaderPanel}"
                              GlassFrameThickness="0"
                              CornerRadius="0" />
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type MyBaseWindowPath:MyBaseWindow}">
                    …
                    <DockPanel x:Name="HeaderPanel">
                    …
                    </DockPanel>
                    …
                </ControlTemplate>
            </Setter.Value>
        </Setter>
</Style>

我想将HeaderPanel 元素ActualHeight的属性绑定到. 可能吗?ControlTemplate


另一种解决方案是对WindowChrome.CaptionHeightand使用固定高度HeaderPanel.Height,但我更喜欢绑定到精确高度。

4

2 回答 2

1

ActualHeight不是 aDependencyProperty或 an INotifyPropertyChanged,因此您不能直接绑定到它并期望不止一次读取。您可以在样式上设置触发器。

解决方法包括:

  • 在您的类(视图侧)中创建一个属性,该属性可以是 aDependencyPropertyINotifyPropertyChanged属性。
  • SizeChanged在您想知道的元素上注册事件AbsoluteHeight
  • 在事件的处理程序中,更新您创建的属性。

更好的实现会使用附加的依赖属性,它们基本上做同样的事情,但它们会更通用一些。

于 2017-03-27T18:14:25.347 回答
0

在 2021 年,我没有绑定的解决方案是将 ax:Name 分配给 WindowChrome 并在事件中更改CaptionHeight值:Window_SizeChanged

private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
{
    SessionWindowChrome.CaptionHeight = ActualHeight
       - SessionWindowChrome.ResizeBorderThickness.Top 
       - SessionWindowChrome.ResizeBorderThickness.Bottom;    
}

考虑到我ResizeBorderThickness也使用变量...

于 2021-06-12T22:22:04.750 回答