Я меняю стиль элемента управления во время выполнения. Скажем, изменив текстовое поле только для чтения (и, следовательно, изменив другие свойства текстового поля, влияющие на отображение), если пользователь находится в «режиме просмотра».
Допустим, у меня есть стиль в ресурсах приложения.
<Style x:Key="ReadOnlyTextBoxStyle" TargetType="{x:Type TextBox}">
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Focusable" Value="False"/>
<Setter Property="Cursor" Value="Arrow"/>
<Setter Property="Background" Value="White"/>
<Setter Property="IsReadOnly" Value="True"/>
<Setter Property="TextBlock.FontWeight" Value="Bold"/>
<Setter Property="ScrollViewer.CanContentScroll" Value="True"/>
<Setter Property="VerticalScrollBarVisibility" Value="Visible"/>
<Setter Property="TextWrapping" Value="Wrap"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True" Background="{TemplateBinding Background}">
<ScrollViewer Name="PART_ContentHost"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Я нашел несколько подходов к ссылке на ресурс в коде через строку, например,
myTextBox.Style = (Style).Resources["ReadOnlyTextBoxStyle"];
Но я не могу найти пример доступа к ресурсу через что-то вроде this:
myControl.Style = (Style).Resources[nameOf(IsThere.Some.Way.To.Get.QualifiedReferenceToStyleResourceKey)];
Если я использую что-то вроде:
myControl.Style = (Style).Resources["ReadOnlyTextBoxStyle"];
, а затем я обновляю ключ до новой строки, например «ReadOnlyTextBoxStyleModified», тогда я должен менять ее везде, на которые ссылаюсь это в коде. Если я пропущу одну из замен, я не получу ошибку до времени выполнения. Я бы предпочел видеть ошибку во время компиляции, если это возможно.
Ответ в связанном ниже вопросе предложил использовать именованную константу, но затем не дал пример. Кажется, что это достигнет sh того, к чему я стремлюсь, но я не понимаю, как реализовать его комментарий, в котором говорится: «1017 *
». Кроме того, хорошей практикой является создание строковой константы, которая отображает имя вашего ключа в словаре ресурсов (чтобы вы могли изменить его только в одном месте). "
Доступ к ресурсу с помощью codebehind в WPF