2016-07-26 53 views
0

不同的模板我有錯誤的對象:爲INotifyDataErrorInfo

/// <summary> 
/// Represent error in wizard control child. 
/// </summary> 
public sealed class ErrorContainer 
{ 
    /// <summary> 
    /// Ctor. 
    /// </summary> 
    /// <param name="kind"></param> 
    /// <param name="message"></param> 
    public ErrorContainer(ErrorKind kind, string message) 
    { 
     Contract.Requires(!string.IsNullOrEmpty(message)); 

     Kind = kind; 
     Message = message; 
    } 

    /// <summary> 
    /// Kind of error. 
    /// </summary> 
    public ErrorKind Kind { get; private set; } 

    /// <summary> 
    /// Text to display. 
    /// </summary> 
    public string Message { get; private set; } 

    public override string ToString() 
    { 
     return Message; 
    } 
} 

/// <summary> 
/// Kind of error. 
/// </summary> 
public enum ErrorKind 
{ 
    /// <summary> 
    /// Prevents telegram send. 
    /// </summary> 
    Critical = 0, 

    /// <summary> 
    /// Only display message. 
    /// </summary> 
    Warning = 1 
} 

我使用INotifyDataErrorInfo和自定義樣式爲我的文本框中。作爲INotifyDataErrorInfo錯誤返回ErrorContainer的集合。我只想在​​是Critical時才顯示錯誤信息。這裏是我如何做到這一點:

<Style x:Key="TextboxWithAdvancedValidationHorizontal" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Style.Triggers> 
    <DataTrigger Binding="{Binding CurrentItem.ErrorContent.Kind}" Value="{x:Static kn01:ErrorKind.Critical}"> 
     <Setter Property="Validation.ErrorTemplate"> 
     <Setter.Value> 
      <ControlTemplate> 
      <StackPanel Orientation="Horizontal" SnapsToDevicePixels="True"> 
       <Border BorderBrush="Salmon" Background="#11FF0000" IsHitTestVisible="False"> 
       <AdornedElementPlaceholder /> 
       </Border> 
       <StackPanel Orientation="Horizontal"> 
       <Polygon VerticalAlignment="Center" Points="0,4 4,0 4,8" Fill="Salmon" Stretch="Fill" Stroke="Salmon" StrokeThickness="2" /> 
       <Border Background="Salmon" Padding="4" Margin="-1,0,0,0"> 
        <TextBlock HorizontalAlignment="Center" Foreground="White" FontWeight="Bold" Margin="2,-1,0,1" Text="{Binding CurrentItem.ErrorContent}" /> 
       </Border> 
       </StackPanel> 
      </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
     </Setter> 
    </DataTrigger> 
    </Style.Triggers> 
</Style> 

但它根本不起作用,並使用默認的錯誤模板。

回答

0

你有沒有試過用斷點調試它來檢查你的綁定? 另外,我認爲你是以一種錯誤的方式瞄準你的風格。這裏的另一個答案可能有所幫助:https://stackoverflow.com/a/4133971/6563936

+0

我確定我以錯誤的方式定位我的風格,但我不明白它應該如何定位它。 –

+0

您確實已將Style =「{StaticResource TextboxWithAdvancedValidationHorizo​​ntal}」添加到要顯示錯誤的文本框中,對嗎? –

+0

當然,我做到了。問題不在於我如何綁定控件樣式,而是如何在內部觸發器中綁定INotifyDataErrorInfo錯誤。 –

2

不要把Validation.ErrorTemplate模板放在Trigger中。

Validation.ErrorTemplate必須在發生錯誤之前設置。

如果您想要不同的錯誤模板,請使用ErrorTemplate中的觸發器。或者,您可以使用ContentPresenterContentTemplateSelector

<Style x:Key="TextboxWithAdvancedValidationHorizontal" TargetType="TextBox"> 
    <Setter Property="Validation.ErrorTemplate"> 
    <Setter.Value> 

      <ControlTemplate> 
      <StackPanel Orientation="Horizontal" SnapsToDevicePixels="True"> 
       <Border BorderBrush="Salmon" Background="#11FF0000" IsHitTestVisible="False"> 
       <AdornedElementPlaceholder /> 
       </Border> 
      </StackPanel> 

      <ControlTemplate.Triggers> 
       <DataTrigger Binding="..."> 
       <!-- add you custom UI logic here --> 
       </DataTrigger> 
      </ControlTemplate.Triggers> 
      </ControlTemplate> 

    </Setter.Value> 
    </Setter> 
</Style> 
相關問題