2017-09-20 43 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

你可以使用下面的代碼來簡化你的答案中的代碼: