Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Клонировать цвет с одного Setter на другой  [new]
PinGT
Member

Откуда:
Сообщений: 3
Доброго времени!
Стандартный стиль textbox'а
Нужно клонировать цвет чтоб при редактировании компонента он менялся во всех указанных местах.

Заранее благодарю!

К сообщению приложен файл. Размер - 66Kb
25 ноя 18, 17:52    [21744191]     Ответить | Цитировать Сообщить модератору
 Re: Клонировать цвет с одного Setter на другой  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
PinGT
Доброго времени!
Стандартный стиль textbox'а
Нужно клонировать цвет чтоб при редактировании компонента он менялся во всех указанных местах.

Заранее благодарю!
Как я понял автора (в том числе из общения на другом форуме), он хочет связать цвет бордюров при фокусе и наведении курсора с кистью в свойстве SelectionBrush. Для того, чтобы при объявлении TextBox, изменив кисть SelectionBrush, у бордюров установилась эта же кисть.
25 ноя 18, 19:15    [21744220]     Ответить | Цитировать Сообщить модератору
 Re: Клонировать цвет с одного Setter на другой  [new]
PinGT
Member

Откуда:
Сообщений: 3
Eld Hasp, В точку!
25 ноя 18, 19:46    [21744238]     Ответить | Цитировать Сообщить модератору
 Re: Клонировать цвет с одного Setter на другой  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
Eld Hasp
PinGT
Доброго времени!
Стандартный стиль textbox'а
Нужно клонировать цвет чтоб при редактировании компонента он менялся во всех указанных местах.

Заранее благодарю!
Как я понял автора (в том числе из общения на другом форуме), он хочет связать цвет бордюров при фокусе и наведении курсора с кистью в свойстве SelectionBrush. Для того, чтобы при объявлении TextBox, изменив кисть SelectionBrush, у бордюров установилась эта же кисть.

Так а в чем проблема? Забиндить Value сеттера на нужное свойство TemplatedParent (использование TemplateBinding здесь не прокатит - будет ArgumentException: Expression type is not a valid Style value).
Как-то так:
<Window
  x:Class="wpftest2.MainWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  mc:Ignorable="d"
  WindowStartupLocation="CenterScreen"
  WindowStyle="SingleBorderWindow"
  Title="MainWindow" Height="600" Width="800">

  <Window.Resources>
    <Style TargetType="{x:Type TextBox}" x:Key="MyTextBox">
      <Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}" />
      <Setter Property="BorderBrush" Value="#808080" />
      <Setter Property="VerticalAlignment" Value="Center" />
      <Setter Property="Margin" Value="5" />
      <Setter Property="OverridesDefaultStyle" Value="True" />
      <Setter Property="Template">
        <Setter.Value>
          <ControlTemplate TargetType="{x:Type TextBox}">
            <Border
              x:Name="Border"
              BorderBrush="{TemplateBinding BorderBrush}"
              BorderThickness="1">
              <ScrollViewer
                x:Name="PART_ContentHost"
                Focusable="False"
                HorizontalScrollBarVisibility="Hidden"
                VerticalScrollBarVisibility="Auto" />
            </Border>
            <ControlTemplate.Triggers>
              <Trigger Property="IsMouseOver" Value="True">
                <Setter
                  TargetName="Border"
                  Property="BorderBrush"
                  Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectionBrush}" />
              </Trigger>
              <Trigger Property="IsKeyboardFocused" Value="True">
                <Setter
                  TargetName="Border"
                  Property="BorderBrush"
                  Value="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=SelectionBrush}" />
              </Trigger>
            </ControlTemplate.Triggers>
          </ControlTemplate>
        </Setter.Value>
      </Setter>
    </Style>
  </Window.Resources>
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition />
      <RowDefinition />
      <RowDefinition />
    </Grid.RowDefinitions>
    <TextBox
      Style="{StaticResource MyTextBox}"
      Text="Source template" />
    <TextBox
      Grid.Row="1"
      Style="{StaticResource MyTextBox}"
      SelectionBrush="Red"
      Text="Red selection" />
    <TextBox
      Grid.Row="2"
      Style="{StaticResource MyTextBox}"
      SelectionBrush="Green"
      Text="Green selection" />
  </Grid>
</Window>
26 ноя 18, 10:22    [21744532]     Ответить | Цитировать Сообщить модератору
 Re: Клонировать цвет с одного Setter на другой  [new]
PinGT
Member

Откуда:
Сообщений: 3
Сон Веры Павловны, Благодарю!
26 ноя 18, 22:21    [21745483]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить