Cub*_*i73 10 wpf xaml binding styles relativesource
我的目标是将Label的Content -Property 绑定到应用Style的Elements的Tag -Property .但我的解决方案似乎不起作用:
我的风格:
<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>
Run Code Online (Sandbox Code Playgroud)
我的文本框:
<TextBox
Style="{StaticResource ResourceKey=HintedTextBox}"
x:Name="tbTest" />
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,你想设置文本VisualBrush,将显示在TextBox.
你可以这样做:
<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>
Run Code Online (Sandbox Code Playgroud)
为了解释为什么你的例子没有获得:
1.正如您可能理解的那样,查看我的示例,RelativeSource必须不是 self,在这种情况下它将指向self(VisualBrush),并且具有该类型的元素必须TextBox位于可视树中更高的位置.
2.绑定RelativeSource在资源中不起作用,因为Resource它不是可视树的一部分,也不是模板的一部分.
3.在风格上这种结构不起作用,因为Style它只是制定者的集合,他不知道控制,是否存在.为此,通常使用DataTemplate或ControlTemplate.
作为替代方案,在这种情况下,我建议使用一个模板TextBox,它将被注册VisualBrush.
以下是我的例子:
<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>
Run Code Online (Sandbox Code Playgroud)
Output

| 归档时间: |
|
| 查看次数: |
9456 次 |
| 最近记录: |