1

案子

我在我的 WPF 窗口中定义了一系列 GridLenghts 作为资源:

<w:GridLength x:Key="ScrollBarRowHeight">17</w:GridLength>

由于此滚动条高度取决于所使用的操作系统,因此我想重构这行代码以使用静态参数值SystemParameters.Horizo​​ntalScrollBarHeight

问题

我已经尝试了这两条线:

<w:GridLength x:Key="ScrollBarRowHeight"><DynamicResource Key="{x:Static System.Windows.SystemParameters.CaptionHeightKey}" /></w:GridLength>
<w:GridLength x:Key="ScrollBarRowHeight"><x:Static x:Key="System.Windows.SystemParameters.HorizontalScrollBarHeight" /></w:GridLength>

导致相同的编译时错误:

Cannot add content to object of type 'System.Windows.GridLength'.

问题

  • 是否可以在 XAML 中以声明方式执行此操作?
  • 如果是,如何?
  • 如果没有,是否有一个不包含代码隐藏的简洁解决方案?

提前致谢!

4

1 回答 1

1

我想知道为什么不SystemParameters.HorizontalScrollBarHeight直接在 XAML 中使用该值,而不是尝试复制它的值?(从评论中添加)

SystemParameters.HorizontalScrollBarHeight提供链接的页面上,有一个代码示例,它准确地向您展示了如何在 XAML代码中使用各种属性:SystemParameters

<Button FontSize="8" Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="5"      
     HorizontalAlignment="Left" 
     Height="{x:Static SystemParameters.CaptionHeight}"
     Width="{x:Static SystemParameters.IconGridWidth}">
     SystemParameters
</Button>

...

Button btncsharp = new Button();
btncsharp.Content = "SystemParameters";
btncsharp.FontSize = 8;
btncsharp.Background = SystemColors.ControlDarkDarkBrush;
btncsharp.Height = SystemParameters.CaptionHeight;
btncsharp.Width = SystemParameters.IconGridWidth;
cv2.Children.Add(btncsharp);

从链接页面:

在 XAML 中,您可以将 SystemParameters 的成员用作静态属性用法或动态资源引用(以静态属性值作为键)。如果您希望基于系统的值在应用程序运行时自动更新,请使用动态资源引用;否则,使用静态引用。资源键具有附加到属性名称的后缀 Key。

因此,如果您希望在应用程序运行时更新值,那么您应该能够Binding像这样使用这些属性:

<Button FontSize="8" Margin="10, 10, 5, 5" Grid.Column="0" Grid.Row="5"      
     HorizontalAlignment="Left" 
     Height="{Binding Source={x:Static SystemParameters.CaptionHeight}}"
     Width="{Binding Source={x:Static SystemParameters.IconGridWidth}}">
     SystemParameters
</Button>

您还应该能够以DynamicResource这种方式使用它:

Property="{DynamicResource {x:Static SystemParameters.CaptionHeight}}"
于 2014-01-29T15:31:08.603 回答