WPF将自定义控件的子属性绑定到父控件

WPF将自定义控件的子属性绑定到父控件,wpf,binding,custom-controls,Wpf,Binding,Custom Controls,我是WPF的新手。我正在尝试创建一个具有HorizontalContentAlignment属性的自定义控件,该属性将根据容器的设置进行更改 <Style x:Key="SimpleRadioButton" TargetType="{x:Type RadioButton}"> <Setter Property="FocusVisualStyle" Value="{x:Null}"/> <Setter Property="Background" Val

我是WPF的新手。我正在尝试创建一个具有HorizontalContentAlignment属性的自定义控件,该属性将根据容器的设置进行更改

<Style x:Key="SimpleRadioButton" TargetType="{x:Type RadioButton}">
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Margin" Value="20 10 20 0"/>
    <Setter Property="Height" Value="24"/>
    <Setter Property="Padding" Value="6"/>
    <Setter Property="HorizontalContentAlignment" Value="{Binding RelativeSource={RelativeSource TemplatedParent}}"/>
</Style>
<ctrl:ToggleExpander
    Header="Worklist"
    IsChecked="{Binding IsVisible, Mode=TwoWay}"
    HorizontalContentAlignment="Right"
    IsToggleEnabled="True">
    <StackPanel>
        <ctrl:SideBarPanel
            HorizontalContentAlignment="Right"
            Header="map provider">
            <RadioButton
                Content="Finished"
                IsChecked="True"
                Style="{DynamicResource SimpleRadioButton}"/>
    </StackPanel>
</ctrl:ToggleExpander>

然后在父容器中设置它们

<Style x:Key="SimpleRadioButton" TargetType="{x:Type RadioButton}">
    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Margin" Value="20 10 20 0"/>
    <Setter Property="Height" Value="24"/>
    <Setter Property="Padding" Value="6"/>
    <Setter Property="HorizontalContentAlignment" Value="{Binding RelativeSource={RelativeSource TemplatedParent}}"/>
</Style>
<ctrl:ToggleExpander
    Header="Worklist"
    IsChecked="{Binding IsVisible, Mode=TwoWay}"
    HorizontalContentAlignment="Right"
    IsToggleEnabled="True">
    <StackPanel>
        <ctrl:SideBarPanel
            HorizontalContentAlignment="Right"
            Header="map provider">
            <RadioButton
                Content="Finished"
                IsChecked="True"
                Style="{DynamicResource SimpleRadioButton}"/>
    </StackPanel>
</ctrl:ToggleExpander>


但它似乎不起作用。有什么办法吗?谢谢对不起,我的英语不好。

您可以使用以下命令,您的radiobutton将获取第一个父框架元素的值(例如,在本例中,您的ctrl:SideBarPanel)


您可以在xaml中使用这种方式:

<Setter Property="HorizontalAlignment">
        <Setter.Value>
            <Binding Path="HorizontalAlignment" RelativeSource="{RelativeSource AncestorLevel=1,AncestorType=FrameworkElement}" />
        </Setter.Value>
</Setter>


我希望能帮助您

相对资源模板parent
旨在用于控制模板。请改为尝试
RelativeSource-AncestorType=ctrl:SideBarPanel
。当然,还要添加一个源属性路径,即
path=HorizontalContentAlignment
。谢谢您的回答。问题是容器可能不是侧边栏面板。我希望它可以用于任何类型的容器,而不仅仅是侧边栏面板。我不知道WPF是否允许。您可以直接绑定RadioButton的HorizontalContentAlignment属性,而不是以样式绑定。您是否计划设置此属性,然后将其值应用于所有子级?和。面板中的ui或其他任何东西是否会相当平坦?@Andy是的,我希望父级设置该值,并将其应用于所有子级。用户界面可以是任何东西,而不仅仅是面板。谢谢你。但是这个不行。它说RelativeSource类型中没有路径属性。