【问题标题】:Resource Dictionary in SilverlightSilverlight 中的资源字典
【发布时间】:2014-03-04 20:35:30
【问题描述】:

我已经努力尝试制作资源字典好几个星期了。如果我要添加一个按钮或一个复选框,那么资源字典就是它们已经被格式化的地方。我有几个问题,除了按钮对我有用之外,什么也得不到。我在 Visual Studio 中使用 Silverlight。这是 App.xaml 部分下的代码。这部分应该没有任何问题,但我正在输入以防万一。

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         xmlns:System="clr-namespace:System;assembly=mscorlib" 
         >


<Application.Resources>
    <ResourceDictionary>

        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Resources_Theme\Styles.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

</Application.Resources>

下面的代码注释为复选框的位置是问题所在。我得到的错误是 Unexpected ATTRIBUTE in parse rule PropertyElement ::= 。物业内容? ENDTAG .. 我不知道如何解决这个问题,我已经尝试了几件事。该按钮工作正常,但复选框没有。复选框和按钮之间的代码应该非常相似,所以我不确定代码哪里错了。如果有人可以帮助我,那就太好了。另外,作为次要问题,有人可以告诉我如何让 Foreground="White" FontFamily="Arial Bold FontSize="16" 使用按钮。

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:System="clr-namespace:System;assembly=mscorlib"
x:Class="DanaTraining.App">

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="Styles.xaml" />
</ResourceDictionary.MergedDictionaries>


<!--Button-->
<Style TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                <Grid>
                    <Rectangle RadiusY="20" RadiusX="20" Stroke="Black">
                        <Rectangle.Fill>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="Black" Offset="0.828"/>
                                <GradientStop Color="#FF4F1818" Offset="0.491"/>
                            </LinearGradientBrush>
                        </Rectangle.Fill>
                    </Rectangle>
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<!--CheckBox-->
<Style TargetType="CheckBox" x:Key="CheckBoxStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="CheckBox">
                <Grid>
                    <CheckBox>
                        <CheckBox.Foreground>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="Black" Offset="0.828"/>
                                <GradientStop Color="#FF4F1818" Offset="0.491"/>
                            </LinearGradientBrush>
                        </CheckBox.Foreground>
                    </CheckBox>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

最后,如果有人能告诉我为 Silverlight 找到一个资源字典模板,那就太好了。我真的很喜欢

【问题讨论】:

  • 无效。您不能在此处添加属性,因为 已经有效地是 Setter 对象的 Value 属性。
  • 那不应该在那里。当我试图让 Foreground="White" FontFamily="Arial Bold FontSize="16" 与按钮一起工作时,它一定已经结束了。无论哪种方式,这条评论都没有回答我提出的两个问题中的任何一个。 1)如何修复复选框(按钮已经可以使用,我不需要)或 2)如何让 Foreground="White" FontFamily="Arial Bold FontSize="16" 使用按钮。
  • 我认为您在这里遇到的问题不是如何让 Foreground="White" 与按钮一起使用,因为这是出厂时的工作方式。您正在为您的按钮创建一个新模板,因此您将需要处理诸如 Foreground 之类的属性在模板中的处理方式。查看 WPF 中的模板绑定和模板控件。有大量在线资源可以提供帮助。
  • 这不是 WPF 它是 Silverlight 请阅读所提出的问题。谢谢。

标签: c# visual-studio silverlight templates resourcedictionary


【解决方案1】:

您正在重新模板复选框,我认为您不需要这样做,因为您所做的只是更改前景。不要为复选框设置模板属性,而是直接设置前景。

为控件创建新模板是 WPF 的一项非常强大的功能,但您随后负责将新模板连接到命令和事件。我认为这可能是您得到一个“不起作用”的复选框。

<!--CheckBox-->
<Style TargetType="CheckBox" x:Key="CheckBoxStyle">
    <Setter Property="Foreground">
        <Setter.Value>
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                <GradientStop Color="Black" Offset="0.828"/>
                <GradientStop Color="#FF4F1818" Offset="0.491"/>
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
</Style>

【讨论】:

  • 这不起作用。我仍然遇到同样的错误。
  • 代码避免是完全有效的,因此如果您仍然遇到错误,可以对其他代码执行。如果您创建一个新项目并在其中复制和粘贴部分代码,您应该能够隔离导致问题的代码。
  • 我仍然有错误。当我最初尝试它时,我创建了一个全新的项目,其中只有复选框。它给了我同样的错误。
猜你喜欢
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多