Присвойте статическое значение ресурсу 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}}"