2016-03-18 83 views
-1

一個用戶控件的特定元素的定式。如果我有以下兩個LabelUserControl它裏面的格子,像這樣:按名稱

<Grid x:Name="mainGrid"> 
    <Label x:Name="labelTitle"/> 
    <Label x:Name="labelValue"/> 
</Grid> 

我可以單獨設置自己的風格從ResourceDictionary東西之內像:

<Style TargetType="{x:Type MyControl}"> 
    <Style.Resources> 
     <Style TargetType="MyControl.mainGrid.labelTitle"> 
     </Style> 
     <Style TargetType="MyControl.mainGrid.labelValue"> 
     </Style> 
    </Style.Resources> 
</Style> 

如果可能的話,我想做到這一切在ResourceDictionary,並沒有觸及UserControl可言。

+0

我想你想要繞過它,做兩個獨立的樣式,並將標籤指向樣式 –

+0

@GordonAllocman我知道我可以做到這一點,但如果可能,我想不必觸摸'UserControl'代碼 – TheLethalCoder

+0

正確但AFAIK樣式是爲了能夠針對某些實例化的控件而設計的,只有類型的控件才適用。如果您希望兩個相同類型的控件的樣式不同,則必須在控件中執行而不是樣式。他們可能決定這樣做,因爲外部定義的樣式意味着可能跨多個不同的控件/應用程序使用。在這裏給出一個源代碼是來自MSDN的[Style Class](https://msdn.microsoft.com/en-us/library/system.windows.style(v = vs.110).aspx),似乎是沒有功能實現你想做的事 –

回答

1

嘗試在基於名稱的樣式中使用觸發器。

的App.xaml

<Application x:Class="WpfApplication34.App" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:local="clr-namespace:WpfApplication34" 
      StartupUri="MainWindow.xaml"> 
    <Application.Resources> 
     <Style TargetType="{x:Type local:MyControl}"> 
      <Style.Resources> 
       <Style TargetType="{x:Type Label}" BasedOn="{StaticResource {x:Type Label}}"> 
        <Style.Triggers> 
         <Trigger Property="Name" Value="labelTitle"> 
          <Setter Property="Content" Value="This is the Title" /> 
          <Setter Property="HorizontalAlignment" Value="Left" /> 
         </Trigger> 
         <Trigger Property="Name" Value="labelValue"> 
          <Setter Property="Content" Value="This is the Value" /> 
          <Setter Property="HorizontalAlignment" Value="Right" /> 
         </Trigger> 
        </Style.Triggers> 
       </Style> 
      </Style.Resources> 
     </Style> 
    </Application.Resources> 
</Application> 

MyControl.xaml

<UserControl x:Class="WpfApplication34.MyControl" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:WpfApplication34" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <Grid x:Name="mainGrid"> 
     <Label x:Name="labelTitle" /> 
     <Label x:Name="labelValue" /> 
    </Grid> 
</UserControl> 

MainWindow.xaml

<Window x:Class="WpfApplication34.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApplication34" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <local:MyControl /> 
    </Grid> 
</Window> 

截圖:

enter image description here