Я затушевываю изображения на отключенных пользовательских элементах управления ImageButton, применяя OpacityMask к Overlay. Предполагаемый эффект состоит в том, что только тело изображения становится серым, поэтому над изображением не накладываются рамки или рамки.
Проблема в том, что, поскольку к URI-изображению обращаются через связанный получатель (вещь, написанная в {TemplateBinding XXX}), маска неприменима. Однако, если URI указан явно, маска будет работать. Поэтому вопрос в том, почему проблема возникает в случае TmplateBinding и как ее решить.
Код XAML, определяющий пользовательскую кнопку изображения:
<my1:ImageButton Height="24" Width="24" x:Name="imageButton1" IsEnabled="False" ImageSource="/SilverlightApplication4;component/Undo_24x24.png" Margin="178,75,198,201">
<Image Source="/SilverlightApplication4;component/Undo_24x24.png" Height="24" Width="24" />
</my1:ImageButton>
Код обработчика пользовательских свойств:
public class ImageButton: Button
{
public static readonly DependencyProperty ImageSourceProperty = DependencyProperty.Register("ImageSource", typeof(ImageSource), typeof(ImageButton), new PropertyMetadata(null));
public ImageSource ImageSource
{
get
{
return (ImageSource)this.GetValue(ImageSourceProperty);
}
set
{
this.SetValue(ImageSourceProperty, value);
}
}
}
Код стиля пользовательского элемента управления (отключенное состояние):
<Rectangle x:Name="DisabledVisualElement" Fill="Red" Opacity="0" >
<Rectangle.OpacityMask>
<ImageBrush ImageSource="{TemplateBinding ImageSource}"/>
</Rectangle.OpacityMask>
</Rectangle>
Интересно, что оба следующих фрагмента кода размещены внутри шаблона стиля
<Image Source="{TemplateBinding ImageSource}" Height="24" Width="24" />
а также
<Rectangle x:Name="DisabledVisualElement" Fill="Red" Opacity="0" >
<Rectangle.OpacityMask>
<ImageBrush ImageSource="/SilverlightApplication4;component/Undo_24x24.png"/>
</Rectangle.OpacityMask>
</Rectangle>
оба работают правильно. Таким образом, проблема заключается в том, что ImageSource = "{TemplateBinding ImageSource}" почему-то не получает правильный URI или не работает по какой-то другой причине. Итак, как это исправить?