c# - 从内部控件绑定(bind)控件属性

标签 c# wpf xaml templates winrt-xaml

我有一个包含另一个控件的控件。 InnerControl 包含一些属性,如 ButtonVisibility。简化的 InnerControl 代码示例如下

public class InnerControl : ControlBase
{
    //...
    public Visibility ButtonVisibility
    {
        get { return (Visibility)GetValue(ButtonVisibility); }
        set { SetValue(ButtonVisibility, value); }
    }

    public static readonly DependencyProperty ButtonVisibility =
        DependencyProperty.Register(
            "ButtonVisibility",
            typeof (Visibility),
            typeof (InnerControl),
            new PropertyMetadata(Visibility.Collapsed));
}

这是包含 InnerControl 作为依赖属性的 MainControl 的代码

public class MainControl : ControlBase
{
    //...
    public InnerControl MyInner
    {
        get { return (InnerControl) GetValue(MyInnerProperty); }
        set { SetValue(MyInnerProperty, value); }
    }

    public static readonly DependencyProperty MyInnerProperty =
        DependencyProperty.Register(
            "MyInner",
            typeof (InnerControl),
            typeof (MainControl),
            new PropertyMetadata(null, OnMyInnerPropertyChanged));

    private static void OnMyInnerPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        //...
    }
}

我在 Generic.xaml 中有两个不同的控件模板

<Style TargetType="local:InnerControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:InnerControl">
                <Grid x:Name="ContainerGrid">
                    <!-- some markup -->
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style TargetType="local:MainControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:MainControl">
                <Grid x:Name="RootGrid">

                    <Button x:Name="MyButton" Visibility="{TemplateBinding ???}"/>

                    <ContentControl x:Name="MyInnerControl" Content="{TemplateBinding MyInner}" />

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

这就是我如何使用这个控件的方式

<controls:MainControl>
    <controls:MainControl.MyInner>
        <controls:InnerControl ButtonVisibility="Visible">
            <!-- some markup -->                
        </controls:InnerControl>
    </controls:MainControl.MyInner>

    <!-- some markup -->
</controls:MainControl>

我需要更改我的 MainControl 的状态单击按钮后。这就是为什么它位于 MainControl 中的原因模板。

所以,任何人都可以给我建议如何绑定(bind) ButtonVisibility来自 MyInnerMyButtonMainControl

最佳答案

您需要直接绑定(bind)到 InnerControl 的“ButtonVisibility”属性,如下所示:

<Button x:Name="MyButton" 
        Visibility="{Binding MyInner.ButtonVisibility, 
                             RelativeSource={RelativeSource TemplatedParent}}"/>

关于c# - 从内部控件绑定(bind)控件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30730273/

相关文章:

c# - wpf mvvm 中的 Datagrid SelectedIndex 在 RaisePropertyChanged 上设置为 0

c# - 类似于Json字符串的字典列表

.net - 使用 PngBitmapEncoder 的 RenderTargetBitmap 在没有显示时在虚拟机上生成空白图像,Windows 10 版本 1903

c# - 将表单域从一个 PDF 复制到另一个

c# - 类型的对象无法应用于期望类型为system.windows.data.ivalueconverter的属性

c# - 将应用程序最小化到系统托盘 - 没有图标出现

c# - 我无法让 ToggleSwitch 控件出现在我的 Windows Phone 应用程序中

silverlight - 无法使用 silverlight 命名空间

c# - 自定义 Microsoft.AspNet.Identity.EntityFramework.UserStore<TUser>

c# - 看不到其他文本框