2013-08-25 17 views
9

Hedefim Etiketi Stil uygulanır Elementler -Emlak için Content Label ait -Emlak bağlamaktır. Ama çözüm işe görünmüyor:WPF - Stil RelativeSource


Tarzım:

<Style 
    TargetType="TextBox" 
    x:Key="HintedTextBox"> 
    <Style.Resources> 
     <VisualBrush 
     AlignmentX="Left" 
     AlignmentY="Center" 
     Stretch="None" 
     x:Key="HintedTextBox_Hint"> 
     <VisualBrush.Visual> 
      <Label 
       Content="{Binding RelativeSource={RelativeSource Self}, Path=Tag}" 
       Foreground="LightGray" /> 
     </VisualBrush.Visual> 
     </VisualBrush> 
    </Style.Resources> 
    <!-- Triggers --> 
</Style> 

Benim metin kutusu: Eğer doğru anlamak

<TextBox 
    Style="{StaticResource ResourceKey=HintedTextBox}" 
    x:Name="tbTest" /> 

cevap

7

, sen VisualBrush için metin ayarlamak istediğiniz Bu, TextBox'da görüntülenecektir.

Böyle yapabilirsiniz:

<TextBox Name="MyTextBox" Tag="MyNewValue" Width="100" Height="25"> 
    <TextBox.Background> 
     <VisualBrush AlignmentX="Left" AlignmentY="Center" Stretch="None"> 
      <VisualBrush.Visual> 
       <Label Content="{Binding RelativeSource={RelativeSource AncestorType=TextBox}, Path=Tag}" Foreground="LightGray" /> 
      </VisualBrush.Visual> 
     </VisualBrush> 
    </TextBox.Background> 
</TextBox> 

Amacıyla senin örneğin Kazanılan değil niçin: muhtemelen anlamak gibi

1., benim örneğe bakarak, RelativeSourceolmamalıdır kendiliğinden, kendi kendine (VisualBrush) işaret eder ve türdeki eleman görsel ağaçta daha yüksek bulunan TextBox olmalıdır. Resource görsel ağacının parçası veya şablonun parçası değildir çünkü RelativeSource ile Bağlama

2., kaynaklarda çalışmaz. Style belirleyiciler sadece toplama olduğu için, kontrol o bilmediği

bu yapı çalışmaz stillerde

3., vardır. Bu amaçla, genellikle DataTemplate veya ControlTemplate'u kullanın.

Alternatif olarak, bu durumda, VisualBrush kayıt olacak olan TextBox için bir şablon kullanmanızı öneririm.

<Window.Resources>    
    <Style TargetType="{x:Type TextBox}"> 
     <Setter Property="SnapsToDevicePixels" Value="True" /> 
     <Setter Property="OverridesDefaultStyle" Value="True" /> 
     <Setter Property="KeyboardNavigation.TabNavigation" Value="None" /> 
     <Setter Property="FocusVisualStyle" Value="{x:Null}" /> 
     <Setter Property="MinWidth" Value="120" /> 
     <Setter Property="MinHeight" Value="20" /> 
     <Setter Property="AllowDrop" Value="true" /> 

     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TextBoxBase}"> 
        <Border Name="Border" CornerRadius="0" Padding="2" BorderThickness="1" BorderBrush="Black"> 
         <Border.Background> 
          <VisualBrush AlignmentX="Left" AlignmentY="Center" Stretch="None"> 
           <VisualBrush.Visual> 
            <Label Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Tag}" 
              Foreground="LightGray" /> 
           </VisualBrush.Visual> 
          </VisualBrush> 
         </Border.Background> 

         <ScrollViewer Margin="0" x:Name="PART_ContentHost" /> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 

<Grid> 
    <TextBox Name="MyTextBox" Tag="MyNewValue" Width="100" Height="25" />   
</Grid> 

Output

enter image description here

: Aşağıda

benim örnektir