【问题标题】:WPF Styles override a Style.Resources propertyWPF 样式覆盖 Style.Resources 属性
【发布时间】:2016-07-22 10:43:53
【问题描述】:

我的风格如下。

<TextBox HorizontalContentAlignment="Center" Text="{Binding IpAddress, Mode=TwoWay}" ToolTip="Ip Address of camera">
                    <TextBox.Style>
                        <Style TargetType="TextBox" xmlns:sys="clr-namespace:System;assembly=mscorlib">
                            <Style.Resources>
                                <VisualBrush x:Key="CueBannerBrush" AlignmentX="Center"  AlignmentY="Center" Stretch="None">
                                    <VisualBrush.Visual>
                                        <Label Content="Camera Ip Address" Foreground="Gray" Opacity="0.5" FontStyle="Italic" />
                                    </VisualBrush.Visual>
                                </VisualBrush>
                            </Style.Resources>
                            <Style.Triggers>
                                <Trigger Property="Text" Value="{x:Static sys:String.Empty}">
                                    <Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
                                </Trigger>
                                <Trigger Property="Text" Value="{x:Null}">
                                    <Setter Property="Background" Value="{StaticResource CueBannerBrush}" />
                                </Trigger>
                                <Trigger Property="IsKeyboardFocused" Value="True">
                                    <Setter Property="Background" Value="White" />
                                </Trigger>
                            </Style.Triggers>
                        </Style>
                    </TextBox.Style>
                </TextBox>     

我将它作为资源字典保存在 Skin.xaml 文件中,以便按照答案 here 中的说明重复使用。

但现在我希望 Content="Camera Ip Address"(样式中的第 7 行)对于我应用样式的每个文本框都不同。我看到了答案thisthis。这些 SO 答案建议使用 BasedOn 属性,但我不确定如何将其应用于我的案例。我的案子似乎很深。有人可以建议我如何实现这一目标。

基本上我想要的是,对于我应用的一个文本框,内容应该是 相机 IP 地址,而对于另一个文本框,我希望这个内容是 相机登录。我如何做到这一点?

【问题讨论】:

    标签: wpf


    【解决方案1】:

    可以将那个内部Label的内容设置为TextBox的Tag属性,然后在Label中显示出来。

    像这样:

    <TextBox Tag="Whatever you want">
        <TextBox.Style>
            <Style TargetType="TextBox">
                <Style.Resources>
                    <VisualBrush x:Key="CueBannerBrush">
                         <VisualBrush.Visual>
                             <Label Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=TextBox},Path=Tag,Mode=OneWay" />
                         </VisualBrush.Visual>
                    </VisualBrush>
                </Style.Resources>
            </Style>
        </TextBox.Style>
    </TextBox>
    

    【讨论】:

    • 我的风格有触发器,但它们没有触发。 :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2018-09-14
    • 1970-01-01
    • 2018-05-08
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多