Присвойте статическое значение ресурсу GridLength

случай

Я определил серию GridLenghts как ресурс в моем окне WPF:

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

Поскольку высота этой полосы прокрутки зависит от используемой операционной системы, я хотел бы реорганизовать эту строку кода для использования значения статического параметра SystemParameters.HorizontScrollBarHeight.

проблема

Я пробовал обе эти строки:

<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 ответ

Решение

Мне интересно, почему бы тебе просто не использовать SystemParameters.HorizontalScrollBarHeight значение непосредственно в вашем XAML, вместо того, чтобы пытаться дублировать его значение? (Добавлено из комментария)

На SystemParameters.HorizontalScrollBarHeight На странице, на которую вы указали ссылку, есть пример кода, который показывает, как именно использовать различные SystemParameters свойства как в XAML, так и в коде:

<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 либо в качестве статического свойства, либо в качестве ссылки на динамический ресурс (со значением статического свойства в качестве ключа). Используйте динамическую ссылку на ресурс, если вы хотите, чтобы системное значение автоматически обновлялось во время работы приложения; в противном случае используйте статическую ссылку. Ключи ресурса имеют суффикс Ключ, добавляемый к имени свойства.

Поэтому, если вы хотите, чтобы значения обновлялись во время работы приложения, вы должны иметь возможность использовать эти свойства в 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}}"
Другие вопросы по тегам