У меня проблема при попытке найти способ сохранить ScrollBars/ScrollViewers
постоянно включенным.Я работаю над приложением ввода данных, где некоторые пользователи могут иметь только права на «чтение».Для этого необходимо отключить все элементы управления, чтобы они не могли вносить какие-либо изменения.
Когда элемент управления отключен, пользователь не может просматривать всю информацию в прокручиваемых элементах управления (Infragistics XamDataGrid
, DevExpress GridControl
, TextBox
es с Wrap, ListBox
и т. Д.).Я надеялся, что смогу «перехитрить» Microsoft и реализовать Trigger
, чтобы установить IsEnabled
в значение true, когда для него было установлено значение false, но, конечно, это не сработало (по разным причинам, я уверен,).
На данный момент я сосредоточился исключительно на текстовом поле, чтобы попытаться отключить содержимое, но оставить включенным ScrollViewer
и не повезло.
Я надеялся, что может быть решение, IE переопределяет свойство зависимостей IsEnabled
ScrollViewer
, чтобы всегда возвращать true, или предоставляет какой-то Style
, который не учитывает ScrollViewer
Я знаю, что TextBox
имеет свойство IsReadOnly
, но это бесполезно для многих других элементов управления, для которых мне нужно решить эту проблему.
Isесть какой-то способ решить эту проблему довольно простым способом (простым, так как я могу создать стиль, который будет применяться везде, без изменения 200+ файлов кода).
Спасибо
РЕДАКТИРОВАТЬ: Вот код, который я использую в примере проекта, чтобы попытаться решить эту проблему.
<Window x:Class="WPFScrollViewerStyles.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style BasedOn="{x:Null}" TargetType="{x:Type TextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type TextBox}">
<Microsoft_Windows_Themes:ListBoxChrome x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderFocused="{TemplateBinding IsKeyboardFocusWithin}" SnapsToDevicePixels="true">
<ScrollViewer x:Name="PART_ContentHost" HorizontalScrollBarVisibility="Visible"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" IsEnabled="True" />
</Microsoft_Windows_Themes:ListBoxChrome>
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="IsEnabled" Value="True" TargetName="PART_ContentHost" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<Grid IsEnabled="False">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="100" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="100" />
<RowDefinition Height="100" />
<RowDefinition Height="100" />
</Grid.RowDefinitions>
<TextBox x:Name="txtScroller" Width="100" Height="100" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" TextWrapping="Wrap" ScrollViewer.CanContentScroll="True">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras faucibus hendrerit lorem, auctor vehicula sem molestie nec. Quisque non massa quam. Nullam tempor blandit tempor. Integer in molestie ipsum. Donec augue mi, auctor vitae scelerisque a, vehicula ac ipsum. Etiam posuere vulputate augue quis convallis. Nullam aliquet purus nec lacus fermentum hendrerit egestas purus tincidunt. Suspendisse quis lacinia libero. Quisque facilisis turpis at augue dignissim aliquam ultrices sem porta. Etiam sagittis arcu id nibh ultrices dictum. Nulla non lectus luctus est malesuada luctus. Praesent sed lobortis nisi. Morbi et porttitor massa. Sed pellentesque, nisl eu imperdiet varius, ligula augue cursus nisl, eu egestas metus velit non elit. Phasellus elementum hendrerit risus, eu tincidunt ante gravida vel.
</TextBox>
<ListBox x:Name="lstScroller" Width="100" Height="100" Grid.Column="1">
<ListBox.Items>
<ListBoxItem Content="Item 1" />
<ListBoxItem Content="Item 2" />
<ListBoxItem Content="Item 3" />
<ListBoxItem Content="Item 4" />
<ListBoxItem Content="Item 5" />
<ListBoxItem Content="Item 6" />
<ListBoxItem Content="Item 7" />
<ListBoxItem Content="Item 8" />
<ListBoxItem Content="Item 9" />
<ListBoxItem Content="Item 10" />
<ListBoxItem Content="Item 11" />
<ListBoxItem Content="Item 12" />
<ListBoxItem Content="Item 13" />
<ListBoxItem Content="Item 14" />
<ListBoxItem Content="Item 15" />
</ListBox.Items>
</ListBox>
</Grid>