Я хочу изменить размер всех полос прокрутки (стрелки и большой палец) в моем приложении, в зависимости от состояния. Условие - это переменная bool (Settings.TouchScreenMode) в ViewModel главного окна.
Я хотел бы сделать это с помощью триггера, что-то вроде этого:
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.Settings.TouchScreenMode,
RelativeSource={RelativeSource AncestorType=Window}}" Value="True">
<Setter Property="ArrowButtonWidth" Value="30" />
</DataTrigger>
</Style.Triggers>
Я нашел способ установить некоторые SystemParameters
но я не могу использовать его в триггере, поэтому полоса прокрутки всегда изменяется, и не только тогда, когда мое значение bool истинно:
<system:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarHeightKey}">30</system:Double>
<system:Double x:Key="{x:Static SystemParameters.HorizontalScrollBarButtonWidthKey}">30</system:Double>
<system:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">30</system:Double>
<system:Double x:Key="{x:Static SystemParameters.VerticalScrollBarButtonHeightKey}">30</system:Double>
Есть ли способ сделать это без замены всего шаблона управления полосой прокрутки?
Вы можете использовать LayoutTransform
для достижения того же
поэтому просто используйте ScaleTransform
в LayoutTransform
и все сделано для сенсорного экрана
например
<StackPanel Orientation="Horizontal">
<ScrollBar Margin="4" />
<ScrollBar Margin="4">
<ScrollBar.LayoutTransform>
<ScaleTransform ScaleX="2"
ScaleY="2" />
</ScrollBar.LayoutTransform>
</ScrollBar>
</StackPanel>
результат
вы можете использовать как
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.Settings.TouchScreenMode,
RelativeSource={RelativeSource AncestorType=Window}}"
Value="True">
<Setter Property="LayoutTransform">
<Setter.Value>
<ScaleTransform ScaleX="2"
ScaleY="2" />
</Setter.Value>
</Setter>>
</DataTrigger>
</Style.Triggers>
Почему бы просто не привязаться к значению с помощью конвертера значений. Однако вам нужно определить свой boolToWidthConverter
в Resources
.
<Style>
<Setter Property="ArrowButtonWidth" Value="{Binding Settings.TouchScreenMode,
RelativeSource={RelativeSource AncestorType=Window}}", Converter={StaticResource boolToWidthConverter} />
</Style>
EDIT: Возможно, вы можете установить эти значения программно.
public partial class GlobalResources : ResourceDictionary
{
public GlobalResources()
{
this.Add("SystemParameters.HorizontalScrollBarButtonWidthKey", your_conditional_value);
}
}
ArrowButtonWidth
и я могу получить доступ только к ширине, установив системные параметры или заменив шаблон ArrowButtonWidth
управления. Но все равно спасибо за предложение.