【问题标题】:Style for Textbox Silverlight文本框 Silverlight 的样式
【发布时间】:2010-07-28 14:02:21
【问题描述】:

我想为文本框制作一个简单的样式。我想保留关于 标准文本框的外观和风格,但一项除外。

OnFocus 希望能够改变文本框的边框颜色。

我写了以下内容,它确实有效。但是,一切都重新设计了,我必须 声明高度,非焦点边框的外观和感觉也不同。如何创建仅影响 onfocus 状态的模板。

 <Style x:Key="TextBoxStyle" TargetType="TextBox">

            <Setter Property="BorderBrush" Value="Gold" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="TextBox">
                        <Grid Height="{TemplateBinding Height}"

                             >
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Normal" />
                                    <VisualState x:Name="MouseOver" />
                                    <VisualState x:Name="Pressed" />
                                    <VisualState x:Name="Disabled" />
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="FocusStates">
                                    <VisualState x:Name="Focused">
                                        <Storyboard>
                                            <ColorAnimation Storyboard.TargetName="brd" 
                                                            Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)" 
                                                            Duration="0" 
                                                            To="Red" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Unfocused"/>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            <Border x:Name="brd" 
                                    BorderBrush="{TemplateBinding BorderBrush}" 
                                    BorderThickness="{TemplateBinding BorderThickness}" 
                                    Background="{TemplateBinding Background}"
                                    CornerRadius="2">
                                <ContentPresenter x:Name="contentPresenter" />
                            </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

【问题讨论】:

  • 你试过 BasedOn 属性吗?

标签: c# silverlight xaml templates


【解决方案1】:

您需要复制原始文本框的整个模板,您可以找到here。然后进行所需的更改。

【讨论】:

  • 只有这样??覆盖一个状态需要大量工作的人....嘘!!!!
  • @gmcalab:是的,我经常听到这句话,我也有同样的感觉,但是很难想象一般的“更好的东西”。大多数“更好的东西”都专门针对个别开发人员当前的需求。
【解决方案2】:

SirDemon 提到的例子……

这是文本块的样式:

<Style
    x:Key="detailBlk"
    TargetType="TextBlock">
    <Setter
        Property="FontSize"
        Value="10" />
    <Setter
        Property="Foreground"
        Value="Purple" />
</Style>

假设我想要另一种字体大小为 20 的样式,但前景色仍然是紫色:

<Style
    x:Key="detailBlk20"
    TargetType="TextBlock"
    BasedOn="{StaticResource detailBlk}">
    <Setter
        Property="FontSize"
        Value="20" />
</Style>

编辑:抱歉,请重新阅读问题。您想更改模板。 setter 属性可以设置任何属性。有趣的是,模板是一个可以在样式中设置的属性。但是,据我所知,您无法更改模板的各个部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多