繁体   English   中英

在样式中设置自定义依赖项属性时绑定自定义属性

[英]Binding custom properties while setting custom dependency property in style

在这里,我有一个自定义的依赖项属性,并以此方式进行设置。 我要做的是将自己的属性绑定到您可以在代码中看到的控件。 正如您在代码中看到的那样,我已经尝试了RelativeResource ,但未显示任何内容。 我是否需要使用ControlTemplate声明目标类型,或者有什么方法可以解决此问题?

资源词典

<Style TargetType="{x:Type infiniteReservoir:PressureSource}">
        <Setter Property="PropertyPanel">
            <Setter.Value>
                <ScrollViewer >
                    <Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="30"/>
                            <RowDefinition Height="30"/>
                            <RowDefinition Height="30"/>
                            <RowDefinition Height="30"/>
                            <RowDefinition Height="30"/>
                            <RowDefinition Height="30"/>
                        </Grid.RowDefinitions>

                        <TextBlock Text="Pressure:" Grid.Row="0"/>
                        <Grid Grid.Column="1">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="2*"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <TextBox/>
                            <ComboBox Grid.Column="1"/>
                        </Grid>

                        <TextBlock Text="Temperature:" Grid.Row="1"/>
                        <Grid Grid.Row="1" Grid.Column="1">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="2*"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <TextBox/>
                            <ComboBox Grid.Column="1"/>
                        </Grid>

                        <TextBlock Text="Label:" Grid.Row="2"/>
                        <TextBox Grid.Row="2" Grid.Column="1" Text="{Binding Name}"/>

                        <TextBlock Text="Media:" Grid.Row="3"/>
                        <TextBlock Grid.Row="3" Grid.Column="1" Text="{Binding ToolTip}"/>

                        <TextBlock Text="Fluid Zone ID:" Grid.Row="4"/>
                        <TextBlock Grid.Row="4" Grid.Column="1"/>

                        <TextBlock Text="Port Name:" Grid.Row="5"/>
                        <TextBox Grid.Row="5" Grid.Column="1"/>

                    </Grid>
                </ScrollViewer>
            </Setter.Value>
        </Setter>
    </Style>

模型

#region PropertyPanel
public ScrollViewer PropertyPanel
{
     get { return (ScrollViewer)GetValue(PropertyPanelProperty); }
     set { SetValue(PropertyPanelProperty, value); }
}
public static readonly DependencyProperty PropertyPanelProperty = DependencyProperty.Register("PropertyPanel", typeof(ScrollViewer), typeof(DesignerItem));
#endregion

任何帮助,将不胜感激。

TemplatedParent仅在ControlTemplate中工作。

我怀疑您想要的是:

<Grid 
    DataContext="{Binding RelativeSource={RelativeSource AncestorType={x:Type infiniteReservoir:PressureSource}}}">

附带说明一下,绑定DataContext通常被认为是较差的做法,因为这通常会带来意想不到的副作用。 您可以改为在子代上的每个绑定中使用RelativeSource:

<TextBlock Text="Label:" Grid.Row="2"/>
    <TextBox 
        Grid.Row="2" 
        Grid.Column="1" 
        Text="{Binding Name, RelativeSource={RelativeSource AncestorType={x:Type infiniteReservoir:PressureSource}}}"
        />

    <TextBlock Text="Media:" Grid.Row="3"/>
    <TextBlock 
        Grid.Row="3" 
        Grid.Column="1" 
        Text="{Binding ToolTip, RelativeSource={RelativeSource AncestorType={x:Type infiniteReservoir:PressureSource}}}"
        />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM