如何在 WPF 中的 Validation.ErrorTemplate 中进行 DataTrigger 绑定

史蒂夫俄亥俄州

我有一个CustomControlControlTemplate. TheCustomControl包含另一个CustomControlwith Label, TextBoxand Validation.ErrorTemplatefor the TextBox

我想要做的是,当我将鼠标悬停CustomControl或聚焦时TextBoxValidation.ErrorTemplate应该弹出窗口。

现在它只会弹出Validation.ErrorTemplate当且仅当我BorderTextBox. 老实说,我不确定它是BorderfromStackPanel还是AdornedElementPlaceholder. 我真的不知道如何将DataTrigger内部绑定Validation.ErrorTemplate到外部Border IsMouseOver属性或IsFocusedTextBox.

在我到目前为止的代码下面:

<ControlTemplate TargetType="{x:Type my:CustomControl}" x:Key="CustomTemplate">
<Border BorderBrush="Green" BorderThickness="1" x:Name="outerBorder">
    <my:LabelControl Label="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ViewModel.Label}">
        <TextBox HorizontalAlignment="Stretch" Padding="3 0 3 0" Foreground="{DynamicResource Control.Foreground}">
            <TextBox.Resources>
                <Style TargetType="{x:Type Border}">
                    <Setter Property="CornerRadius" Value="3"/>
                </Style>
            </TextBox.Resources>
            <TextBox.Text>
                <Binding Path="ViewModel.Value" UpdateSourceTrigger="PropertyChanged" RelativeSource="{RelativeSource TemplatedParent}" ValidatesOnDataErrors="True"/>
            </TextBox.Text>
            <TextBox.Style>
                <Triggers>
                    ...
                </Triggers>
            </TextBox.Style>
            <Validation.ErrorTemplate>
                <ControlTemplate>
                    <StackPanel x:Name="BorderBorder">
                        <Border BorderThickness="1" BorderBrush="Red" CornerRadius="3" HorizontalAlignment="Left" >
                            <AdornedElementPlaceholder x:Name="textBox"/>
                        </Border>
                        <Border Background="LightGoldenrodYellow"  CornerRadius="3">
                            <TextBlock Text="{Binding [0].ErrorContent}"/>
                            <Border.Style>
                                <Style>
                                    <Setter Property="Border.Visibility" Value="Collapsed"></Setter>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding ElementName=BorderBorder, Path=IsMouseOver}" Value="true">
                                            <Setter  Property="Border.Visibility" Value="Visible"></Setter>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Border.Style>
                        </Border>
                    </StackPanel>
                </ControlTemplate>
            </Validation.ErrorTemplate>
        </TextBox>
    </my:LabelControl>
</Border>
</ControlTemplate>

所以如果可能的话,DataTrigger内部Validation.ErrorTemplate应该是绑定的ElementName=outerBorder

我想问题是我有一个ControlTemplate内部 aControlTemplate所以DataTrigger Binding内部ControlTemplate( Validation.ErrorTemplate) 不知道Properties外部的。

毫米8

您可以将 的Tag属性绑定TextBoxIsMouseOver控件本身属性,然后将 绑定DataTriggerTag装饰元素属性:

<ControlTemplate TargetType="{x:Type my:CustomControl}" x:Key="CustomTemplate">
    <Border BorderBrush="Green" BorderThickness="1" x:Name="outerBorder">
        <my:LabelControl Label="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ViewModel.Label}">
            <TextBox HorizontalAlignment="Stretch" Padding="3 0 3 0" Foreground="{DynamicResource Control.Foreground}"
                     Tag="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType=my:CustomControl}}">
                <TextBox.Resources>
                    <Style TargetType="{x:Type Border}">
                        <Setter Property="CornerRadius" Value="3"/>
                    </Style>
                </TextBox.Resources>
                <TextBox.Text>
                    <Binding Path="ViewModel.Value" UpdateSourceTrigger="PropertyChanged" RelativeSource="{RelativeSource TemplatedParent}" ValidatesOnDataErrors="True"/>
                </TextBox.Text>
                <Validation.ErrorTemplate>
                    <ControlTemplate>
                        <StackPanel x:Name="BorderBorder">
                            <Border BorderThickness="1" BorderBrush="Red" CornerRadius="3" HorizontalAlignment="Left" >
                                <AdornedElementPlaceholder x:Name="textBox"/>
                            </Border>
                            <Border Background="LightGoldenrodYellow"  CornerRadius="3">
                                <TextBlock Text="{Binding [0].ErrorContent}"/>
                                <Border.Style>
                                    <Style>
                                        <Setter Property="Border.Visibility" Value="Collapsed"></Setter>
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding AdornedElement.(TextBox.Tag), ElementName=textBox}" Value="True">
                                                <Setter  Property="Border.Visibility" Value="Visible"></Setter>
                                            </DataTrigger>
                                        </Style.Triggers>
                                    </Style>
                                </Border.Style>
                            </Border>
                        </StackPanel>
                    </ControlTemplate>
                </Validation.ErrorTemplate>
            </TextBox>
        </my:LabelControl>
    </Border>
</ControlTemplate>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

绑定UserControl中的Validation.ErrorTemplate

来自分类Dev

如何处理WPF DataGrid的DataTrigger绑定中的空格?

来自分类Dev

在WPF中为Validation.ErrorTemplate添加情节提要

来自分类Dev

在WPF中为Validation.ErrorTemplate添加情节提要

来自分类Dev

无法解析Datatrigger WPF中的绑定

来自分类Dev

WPF级联的DataTrigger绑定

来自分类Dev

Wpf 绑定 + DataTrigger

来自分类Dev

如何在WPF MVVM中进行数据绑定

来自分类Dev

如何在WPF MVVM中进行数据绑定

来自分类Dev

WPF Validation.ErrorTemplate背景对象

来自分类Dev

如何在JavaFX 2中的FXML中进行绑定?

来自分类Dev

如何在WPF中绑定

来自分类Dev

在RadRichTextBox(WPF)中进行绑定

来自分类Dev

WPF中的DataTrigger问题

来自分类Dev

WPF xaml DataTrigger绑定不起作用

来自分类Dev

在WPF中将对象绑定到DataTrigger

来自分类Dev

WPF DataTrigger可以停用键绑定吗?

来自分类Dev

如何在WPF中绑定到UpdateSourceTrigger?

来自分类Dev

如何在WPF中设置数据绑定

来自分类Dev

在WPF中,如何对LostFocus进行绑定,而对PropertyChanged进行验证?

来自分类Dev

WPF绑定:如何在UserControl XAML中设置绑定源

来自分类Dev

WPF绑定:如何在UserControl XAML中设置绑定源

来自分类Dev

如何在WPF中绑定和刷新UserControl绑定?

来自分类Dev

如何在Angular 2中进行简单的文本输入绑定?

来自分类Dev

如何在vmware工作站的ubuntu 12.04中进行绑定?

来自分类Dev

如何在ReactiveCocoa 3和4中进行基本绑定

来自分类Dev

如何在vmware工作站的ubuntu 12.04中进行绑定?

来自分类Dev

如何在WPF中进行投射

来自分类Dev

如何通过在WPF中进行绑定来设置复选框内容的背景色

Related 相关文章

热门标签

归档