Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF,在多个子角色上使用单个值设置属性_C#_Wpf_Silverlight - Fatal编程技术网

C# WPF,在多个子角色上使用单个值设置属性

C# WPF,在多个子角色上使用单个值设置属性,c#,wpf,silverlight,C#,Wpf,Silverlight,我有一个父contentcontrol,它通过datatemplate显示数据。datatemplate包含一个stackpanel,其中包含多个相同类型的UserControl。我只想在父控件上设置一次属性,它必须在所有子控件上设置属性的值。但如果有一种方法可以在stackpanel上实现,也可以。可以在运行时更改模板,并且还需要将值传播到新模板 我当前的解决方案是在父控件和子控件上实现属性,并使用代码将值从父控件传播到所有子控件。我的问题是:有没有更好的或其他的方法 编辑: 对我的问题的一些

我有一个父contentcontrol,它通过datatemplate显示数据。datatemplate包含一个stackpanel,其中包含多个相同类型的UserControl。我只想在父控件上设置一次属性,它必须在所有子控件上设置属性的值。但如果有一种方法可以在stackpanel上实现,也可以。可以在运行时更改模板,并且还需要将值传播到新模板

我当前的解决方案是在父控件和子控件上实现属性,并使用代码将值从父控件传播到所有子控件。我的问题是:有没有更好的或其他的方法

编辑: 对我的问题的一些澄清说明。该应用程序目前是WPF,但如果它可以移植到silverlight,这将是一个额外的好处。该属性是类型样式的依赖项

我想用它来设计部分子控件的样式。目前,datatemplate存储在单独的资源字典中,因此可以重用。子控制项的视觉效果通过controltemplate设置样式。该模板包含三个不同的控件,第一个是标签。需要(愿望,愚蠢的愿望)是只设置一次样式,以使datatemplate中所有子控件上的标签具有一致的外观和感觉。 所以问题的关键是重写子控件上的样式依赖属性的值,该属性存储在容器控件的资源字典中。两者都是自定义用户控件,因此所有选项都是打开的

<Parent SubSubStyle="x" Template="template" />

<DataTemplate x:Key=template>
  <StackPanel>
    <Subcontrol SubSubStyle="?"/>
    <Subcontrol SubSubStyle="?"/>
    <Subcontrol SubSubStyle="?"/>
    <Subcontrol SubSubStyle="?"/>
  </StackPanel>
</DataTemplate>

样式是最好的选择

是您试图设置已创建的DependencyProperty的属性吗?如果是这样的话,在WPF中理想的做法是定义属性,这样它将由可视化树中的元素来定义

如果它不是您自己的依赖项属性(或者如果您使用的Silverlight不支持此机制),那么您应该改为使用


您需要一个WPF和Silverlight解决方案,或者只需要Silverlight?它目前只是WPF,但如果它同时在WPF和Silverlight中工作,那就太好了。它可以工作,但我需要使用RegisterAttached(),而不是register来让继承正常工作。子控件需要AddOwner()及其选项。谢谢大家的回答!嗯,也许我还记得以前遇到过。我记得我在一个不相关的类上创建了一个附加属性,然后在父控件和子控件上执行AddOwner。这样,我在使用它时就不必使用附加属性语法。
public class MyControl {

    // be prepared for some dependency property hell below
    // this defines a DependencyProperty whose value will be inherited
    // by child elements in the visual tree that do not override
    // the value. An example of such a property is the FontFamily
    // property. You can set it on a parent element and it will be
    // inherited by child elements that do not override it.

    public static readonly DependencyProperty MyInheritedProperty =
        DependencyProperty.Register(
            "MyInherited",
            typeof(string),
            typeof(MyControl),
            new FrameworkPropertyMetadata(
                null,
                FrameworkPropertyMetadataOptions.Inherits
            )
        );

}