为GridLength资源分配静态值

时间:2014-01-29 15:15:27

标签: c# .net wpf xaml gridlength

案例

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

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

由于此滚动条高度可根据所使用的操作系统而变化,因此我想重构这行代码以使用静态参数值SystemParameters.HorizontalScrollBarHeight

问题

我已尝试过这两行:

<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中以声明方式执行此操作?
  • 如果是,怎么样?
  • 如果不是,是否有一个不包含代码隐藏的简洁解决方案?

提前致谢!

1 个答案:

答案 0 :(得分:1)

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

提供链接的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的成员用作静态属性用法或动态资源引用(以static属性值作为键)。如果希望在应用程序运行时自动更新基于系统的值,请使用动态资源引用;否则,使用静态引用。资源键的后缀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}}"