2010-01-24 3 views
1

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

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

<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 для кисти в этом конкретном шаблоне управления?

Благодарим за помощь.

+0

Почему WPF требует x: Имя на кисти? Обычно не требуется имя: ссылаетесь ли вы на него с помощью триггера или анимации или кода или что-то еще? Если бы вы могли сказать, что это такое и что вы хотите сделать с кистью? – itowlson

+0

Это меня удивило. Управление календарями WPF (WPF Toolkit, июнь 2009 г.) немного взломан.Цвет текста календаря жестко закодирован в трех разных шаблонах управления, некоторые вещи, которые обычно выполняются в шаблоне управления, выполняются в коде и т. Д. Когда код пахнет, он действительно воняет. –

+0

Я думаю, что причина, по которой они это сделали, - это то, что вы не можете легко оживить что-то в ресурсном словаре, поэтому они должны были испечь «TextColor» в – Schneider

ответ

1

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

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

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

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

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

Dodgy не начинает описывать его. Это шаблон управления для календаря WPF, и это беспорядок. Это требует серьезной операции только для привязки цвета текста календаря к свойству переднего плана элемента управления. –

+0

Вы хотите сохранить цветные анимации в календаре? Если не просто сорвать раскадровки – Schneider

0

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

<!-- FS: Changed template brush color --> 
<SolidColorBrush x:Name="TextColor"> 
    <SolidColorBrush.Color> 
     <StaticResource ResourceKey="FsTextColor" /> 
    </SolidColorBrush.Color> 
</SolidColorBrush> 
Смежные вопросы