2017-09-20 38 views
0

使用“Template10.Validation”,我想更改样式。C#UWP 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

东西很奇怪。因为我想为唯一的名字显示验证警告消息。但它显示每一个警告。从地址,邮政编码。

我的主要quesiton 如何访问 “ValidatableModelBase.Property [” 属性名 “]。错误” 在XAML。 ,因为[] branket无法在XAML绑定中使用。如何访问?

+0

不要使用引号,您可以在XAML中使用方括号,请参阅我的[验证与棱镜示例](https:/ /github.com/bartlannoeye-com/2017-01-UWPValidation/blob/master/Src/Validation/Views/MainPage.xaml#L24)。 – Bart

回答

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>  

and Last is Style in Resource file。

<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>                   

我希望它能帮助别人。 和我很抱歉,我的可怜的问题的描述...我会尝试下一步...

+0

你可以使用下面的代码来简化你的答案中的代码: