C#UWP Template10.Validation Change Style

时间:2017-09-20 09:09:44

标签: c# validation uwp template10

使用" Template10.Validation",我想改变风格。

首先,我为"验证:ControlWrapper"。

制作了这个样式
<Style TargetType="validate:ControlWrapper">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="validate:ControlWrapper">
                <StackPanel>

                    <ContentPresenter Content="{TemplateBinding Content}" />

                    <ItemsControl ItemsSource="{Binding Errors, Source={TemplateBinding Properties[PropertyName]}}" >
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Foreground="Red" Text="{Binding}" Visibility="{Binding IsValid}"/>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>


                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

以下是结果。

enter image description here

有点奇怪。因为我想显示仅限名字的验证警告消息。但它会显示每一个警告。来自地址,邮政编码。

我的主要问题 如何访问&#34; ValidatableModelBase.Property [&#34; PropertyName&#34;]。错误&#34;在Xaml。 因为[] branket不能用于XAML绑定。如何访问??

1 个答案:

答案 0 :(得分:1)

我的时间很多,我终于找到了解决自己问题的方法......

首先是我的模特课。

public class SettingEmail
    : Template10.Validation.ValidatableModelBase
{public string EmailReceivers { get { return Read<string>(); } set { Write(value); } }}

接下来是要绑定的属性。 (在我的ViewModel类中)

public SettingEmail SettingEmailModel{ get { return se; } set { this.Set(ref se, value); } }

接下来是XAML代码。

<validate:ControlWrapper DataContext="{Binding SettingEmailModel}"                                    
                     PropertyName="EmailReceivers"                                                    
                     Style="{StaticResource validationNotify}">                                       
    <TextBox Text="{Binding EmailReceivers, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"        
             MinHeight="400" Style="{StaticResource SettingStyle_MultilineTextBox}"/>                 
</validate:ControlWrapper>    

和Last是资源文件中的样式。

<Style x:Key="validationNotify" TargetType="validate:ControlWrapper">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="validate:ControlWrapper">
                <StackPanel >

                    <ContentPresenter Content="{TemplateBinding Content}"/>


                    <ItemsControl DataContext="{TemplateBinding Property}" 
                                  ItemsSource="{Binding Errors, Source={TemplateBinding Property}}"  
                                  Style="{StaticResource validationNotifyMessage}" 
                                   >
                        <ItemsControl.ItemTemplate >
                            <DataTemplate>
                                <StackPanel>
                                    <TextBlock Foreground="Red" Text="{Binding}"/>
                                </StackPanel>

                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>

                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>                                                                        

我希望它对某人有所帮助。 对于我可怜的问题的描述我很抱歉......接下来我会尝试改进......