Я хочу добавить восклицательный знак Изображение слева от встроенного TextBox
и сделать его видимым, когда привязанное свойство правдиво, иначе скрыть его.ControlTemplate для добавления элементов UIElements к исходному управлению
Как я могу использовать ControlTemplate
для добавления изображения без перевязывания всех свойств TextBox
?
<StackPanel>
<StackPanel.Resources>
<ControlTemplate x:Key="TextBoxWithIndicator" TargetType="{x:Type TextBox}">
<StackPanel Orientation="Horizontal">
<!-- Re-bind {Binding Path=Property}, including some that I may miss -->
<TextBox Text="{TemplateBinding Text}" Width="{TemplateBinding Width}" Height="{TemplateBinding Height}"/>
<Image Source="resources/exclaim.png" Visibility="{TemplateBinding Validation.HasError}"/>
</StackPanel>
</ControlTemplate>
</StackPanel.Resources>
<TextBox Template="{StaticResource TextBoxWithIndicator}" Width="120">Happy Go Lucky</TextBox>
</StackPanel>
Примечание Предшествующее блок кода представляет мои тщетные усилия в WPF до сих пор. Вероятно, это также неверно по нескольким подсчетам, например. вероятно, нужен ValueConverter
для Visibility <--> Validation.HasError
; Установка Width="120"
на TextBox, кажется, регулирует ширину стека, а не ширину TextBox, несмотря на TemplateBinding и т. Д.
Рассматривали ли вы использование '' Adorner' (http://msdn.microsoft.com/en-us/library/ms743737.aspx) вместо 'ControlTemplate'? –
Также имейте в виду, что если вы просто говорите о настройке внешнего вида «TextBox», когда он имеет ошибку проверки, существует «Validation.ErrorTemplate», предназначенная специально для этой цели. [Здесь] (http://stackoverflow.com/questions/7434245/validation-error-style-in-wpf-similar-to-silverlight) - это ответ с кодом для его создания, который вы можете настроить. –
@BrianS Извините, поскольку я новичок в WPF, я не знал о ErrorTemplate и Adorner. Я действительно хотел бы получить ответ, который применяется даже в случае исключения из контекста проверки ошибок. Я думаю, что Adorner должен быть тем, что я ищу. Если вы можете написать это как ответ, я отметю его. – Jake