WPF: установка именованного цвета для ресурса? - PullRequest
1 голос
/ 24 января 2010

Я изменяю шаблон элемента управления WPF Calendar для изменения цвета текста и стрелок Предыдущий и Далее на элементе управления. Я хочу установить цвет для локального ресурса SolidColorBrush с именем MyTextBrush.

Кнопки «Назад» и «Далее» имеют отдельные шаблоны элементов управления, и каждый из них рисует объект Path для стрелки своей кнопки. Вот соответствующая разметка для кнопки Previous :

<Path Margin="14,-6,0,0" Height="10" Width="6" VerticalAlignment="Center" HorizontalAlignment="Left" Stretch="Fill" Data="M288.75,232.25 L288.75,240.625 L283,236.625 z">
    <Path.Fill>
        <SolidColorBrush x:Name="TextColor" Color="#FF333333" />
    </Path.Fill>
</Path>

Обратите внимание, что цвет называется TextColor, используя свойство x:Name.

Вот моя проблема: требуется свойство x:Name - WPF выдает исключение, если оно отсутствует. Это означает, что я не могу просто заменить всю кисть ссылкой на ресурс MyTextBrush, потому что я потеряю значение x:Name. Итак, как мне ссылаться на MyTextBrush, сохраняя при этом свойство x:Name для кисти в этом конкретном шаблоне элемента управления?

Спасибо за вашу помощь.

Ответы [ 2 ]

1 голос
/ 25 января 2010

Итак, как мне ссылаться на MyTextBrush, при этом сохраняя х: имя свойство кисти в этом конкретный шаблон управления?

Что касается этой проблемы, то похоже, что вы используете хитрый / хрупкий шаблон. Что это за шаблон управления?

  • Если у вас есть полный контроль над шаблоном в исходном коде, удалите ссылки на названный элемент (скорее всего, в раскадровке). По какой-то причине они должны анимировать кисть.
  • Другой вариант может состоять в том, чтобы просто создать еще одну неиспользуемую кисть в вашем шаблоне (возможно, для скрытого элемента) с правильным именем, чтобы шаблон оставался счастливым.
  • Наконец, вы можете попробовать добавить x: Name на кисть в общем RD , но это довольно сложно и не уверен, что оно того стоит!

Еще два возможных решения:

  • Попробуйте связать только свойство Color SCB ..., которое должно работать как DP
  • Измените шаблон анимации, чтобы он не использовал именованную кисть, а вместо этого использовал именованный родительский элемент, а затем получил доступ к кисти через TargetProperty, например. Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="myNamedParent"
0 голосов
/ 25 января 2010

Лучшим решением, по-видимому, является разделение свойства Color на его собственный тег и использование ссылки на ресурс для этого. Вот как это выглядит:

<!-- FS: Changed template brush color -->
<SolidColorBrush x:Name="TextColor">
    <SolidColorBrush.Color>
        <StaticResource ResourceKey="FsTextColor" />
    </SolidColorBrush.Color>
</SolidColorBrush>
...