【问题标题】:WPF Binding in StyleWPF 样式绑定
【发布时间】:2011-02-02 12:31:35
【问题描述】:

我正在尝试在Background 中设置一个简单的TextBox 和一些水印文本。我的代码基于Philip Patrick's blog 中的示例。

我正在尝试对其进行调整,以便从 TextBoxToolTip 属性中检索背景中显示的文本。

目前可行:

<TextBox ToolTip="Type a name here...">
            <TextBox.Background>
                <VisualBrush TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left">
                    <VisualBrush.Visual>
                        <TextBlock FontStyle="Italic" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBox}}, Path=ToolTip}"/>
                    </VisualBrush.Visual>
                </VisualBrush>
            </TextBox.Background>
        </TextBox>

这会在TextBoxBackground 中显示ToolTip 文本。

但如果我将部分代码移出资源样式,绑定将不再从TextBox 获取ToolTip 信息:

<Grid>
    <Grid.Resources>
        <Style x:Key="WatermarkBackground" TargetType="{x:Type TextBox}">
            <Setter Property="Background">
                <Setter.Value>
                    <VisualBrush TileMode="None" Opacity="0.4" Stretch="None" AlignmentX="Left">
                        <VisualBrush.Visual>
                            <TextBlock FontStyle="Italic" Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBox}}, Path=ToolTip}"/>
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </Style>
    </Grid.Resources>

    <TextBox ToolTip="Type your name here..." Style="{StaticResource WatermarkBackground}"/>

这里有什么提示吗?

【问题讨论】:

  • 能否使用模板代替样式,以便使用 {Binding RelativeSource={RelativeSource TemplatedParent}, Path=ToolTip}?

标签: wpf binding styles


【解决方案1】:

您无法以您尝试的方式访问 TextBox,您的 TextBlock 不在 TextBox 的可视层次结构中。所以它无法找到文本框。您可以尝试使用带水印的文本框。 Check this 获取带水印文本框的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    • 2013-07-10
    • 2020-12-15
    • 2018-11-20
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多