首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >TextBox.Foreground.Opacity属性的奇怪行为

TextBox.Foreground.Opacity属性的奇怪行为
EN

Stack Overflow用户
提问于 2012-01-13 15:50:38
回答 1查看 542关注 0票数 2

我创建了一个silverlight模板控件。建筑物控件由4个元素组成:2个文本框和2个文本块。标记(generic.xaml格式):

代码语言:javascript
运行
复制
<Style TargetType="local:InputForm">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="local:InputForm">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition />
                                <RowDefinition />
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition/>
                                <ColumnDefinition/>
                            </Grid.ColumnDefinitions>
                            <TextBlock Text="Login" Grid.Column="0" Grid.Row="0"/>
                            <TextBlock Text="Password" Grid.Column="0" Grid.Row="1"/>
                            <TextBox x:Name="LoginTextBox" Grid.Column="1" Grid.Row="0" Text="Login..."/>
                            <TextBox x:Name="PasswordTextBox" Grid.Column="1" Grid.Row="1" Text="Password..."/>
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

在代码文件中,我从模板中获取文本框,并将Foreground.Opacity属性设置为0.5。代码:

代码语言:javascript
运行
复制
public class InputForm : Control
{
    private TextBox _loginTextBox;
    private TextBox _passwordTextBox;

    public InputForm()
    {
        this.DefaultStyleKey = typeof(InputForm);
    }

    public override void OnApplyTemplate()
    {
        base.OnApplyTemplate();

        _loginTextBox = this.GetTemplateChild("LoginTextBox") as TextBox;
        _passwordTextBox = this.GetTemplateChild("PasswordTextBox") as TextBox;

        SetInActive();
    }

    private void SetInActive()
    {
        _loginTextBox.Foreground.Opacity = .5;
        _passwordTextBox.Foreground.Opacity = .5;
    }
}

当我在我的silverlight应用程序中添加这个控件时,所有的文本框元素都开始用Foreground.Opacity = 0.5表示文本启动应用程序:

选择“登录”选项卡:

返回到“一些信息”选项卡:

示例位于此处:http://perpetuumsoft.com/Support/silverlight/SilverlightApplicationOpacity.zip是silverlight错误还是我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-13 16:58:49

问题是前台属性的类型是Brush,这是一个引用类型(一个类)。

指定.Opacity = 0.5时,将更改引用的Brush的不透明度值。引用同一画笔的所有其他元素都将受到影响。

通常,我们会在控件模板中使用VisualStateManager中的故事板来指定控件在不同“状态”下的视觉外观。

但是,您的代码的快速修复方法是:

代码语言:javascript
运行
复制
private void SetInActive()     
{     
    Brush brush = new SolidColorBrush(Colors.Black) { Opacity = 0.5 };
    _loginTextBox.Foreground = brush    
    _passwordTextBox.Foreground= brush
}   
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8847426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档