2013-05-15 48 views
0

我已經爲「必填字段」標籤創建了一個樣式,該標籤應該在標籤前面放置一個紅色星號「*」。這裏是從我的WPF應用程序的Application.Resources部分採取了我的XAML:WPF資源部分不影響我在視圖中的標籤控制

<Style TargetType="Label" x:Key="RequiredField"> 
     <Setter Property="Margin" Value="0,0,5,0" /> 
     <Setter Property="HorizontalAlignment" Value="Right" /> 
     <Setter Property="Content"> 
      <Setter.Value> 
       <ControlTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="*" Foreground="Red" FontSize="10"/> 
         <TextBlock Text="{Binding}" /> 
        </StackPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

在我看來,XAML使用這樣的資源:

<Label Grid.Row="1" Grid.Column="0" Style="{StaticResource RequiredField}" Content="Name:"/> 

煩人它不會出現修改標籤。誰能告訴我我做錯了什麼?

+0

調試XAML可能會非常痛苦:) 請嘗試以下兩件事: 1-鏈中是否有任何anohter資源(從Application.Resources開始)名爲RequiredField,可以覆蓋此資源? 2-嘗試消除setter並查看它是否會影響結果。 – graumanoz

回答

1

嗯,你的風格似乎是錯誤的。我會試試這種方式。

<Style TargetType="Label" x:Key="RequiredField"> 
    <Setter Property="Margin" Value="0,0,5,0" /> 
    <Setter Property="HorizontalAlignment" Value="Right" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type Label}"> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="*" Foreground="Red" FontSize="10"/> 
        <TextBlock Text="{TemplateBinding Content}" /> 
       </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

這應該是訣竅,但它完全沒有經過測試。

+0

這個小小的變化解決了我的問題。爲我節省了一些時間。非常感謝。 – Retrocoder

+0

不客氣。 – DHN

0

該模板被分配給Content屬性。那是錯的。

相反,它可以分配給Template屬性,但在這種情況下,使用Validation.ErrorTemplate屬性可能會更好,因爲它是用於驗證裝飾者的。

From this article

<ControlTemplate x:Key="TextBoxErrorTemplate"> 
    <StackPanel> 
     <StackPanel Orientation="Horizontal"> 
      <Image Height="16" Margin="0,0,5,0" 
        Source="Assets/warning_48.png"/> 
      <AdornedElementPlaceholder x:Name="Holder"/> 
     </StackPanel> 
     <Label Foreground="Red" Content="{Binding ElementName=Holder, 
       Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/> 
    </StackPanel> 
</ControlTemplate> 

<TextBox x:Name="Box" 
    Validation.ErrorTemplate="{StaticResource TextBoxErrorTemplate}"> 
相關問題