C# WPF自定义控件

C# WPF自定义控件,c#,wpf,properties,C#,Wpf,Properties,我一直在努力想办法解决这个问题 故事:我有一个主窗口和两个用户控件。 当主窗口加载时,一个控件可见,另一个不可见。 一旦用户输入了他们的数据和设置,我需要使另一个表单可见 启动时不可见的表单需要初始化,因为它正在从运行它的计算机的WMI收集数据。它还收集广告信息,为用户做准备 由于某种原因,我无法得到一个表格来显示另一个表格 我想这就是我应该看到的: #region Class Variable public string ShowSideBar { get { return (Stri

我一直在努力想办法解决这个问题

故事:我有一个
主窗口和两个用户控件。
当
主窗口加载时,一个控件可见,另一个不可见。
一旦用户输入了他们的数据和设置,我需要使另一个表单可见

启动时不可见的表单需要初始化,因为它正在从运行它的计算机的WMI收集数据。它还收集广告信息,为用户做准备

由于某种原因,我无法得到一个表格来显示另一个表格

我想这就是我应该看到的:

#region Class Variable
    public string ShowSideBar { get { return (String)GetValue(VisibilityProperty); } set { SetValue(VisibilityProperty, value); }}
    public DependencyProperty VisibilityProperty = DependencyProperty.Register("ShowSideBar", typeof(string), typeof(UserControl), null);
    #endregion
这是在我的
MainWindow
类中设置的,但是,我不知道为什么不能从任何其他用户控件调用它

有没有办法从我的主窗口向我的所有窗体公开这样的内容

public int RowSpan {
   get { return Grid.GetRowSpan(DockPanel1); }
   set {  Grid.SetRowSpan(DockPanel1,value); }
}

依赖项属性必须是静态的。为什么类型为
字符串
?如果要将控件的可见性绑定到它,它是否应该是
可见性

它必须是依赖项属性吗?您也可以使用常规属性并实现
INotifyPropertyChanged
,因为您没有将此字段绑定到任何内容,而是将其他内容绑定到它

对于依赖项属性,请尝试以下操作:

public static readonly DependencyProperty SideBarVisibilityProperty = DependencyProperty.Register("SideBarVisibility", typeof(Visibility), typeof(MyTemplatedControl), null);
public Visibility SideBarVisibility
{
    get { return (Visibility)GetValue(SideBarVisibilityProperty); }
    set { SetValue(SideBarVisibilityProperty, value); }
}

首先,此应用程序将得益于MVVM模式的应用

但是,如果不采取这种方法,您仍然可以解决您的问题。用户控件依靠知道其父控件是什么是不寻常的。主窗口的代码是放置此代码的更好位置。(不如视图模型好……但这是另一回事。)

添加到应使侧栏成为可见事件的控件,
ShowSideBar
。在主窗口中附加处理程序,并使用该处理程序显示第二个控件。这里根本不需要依赖属性

public class MyControl : UserControl
{
    ...
    public event EventHandler ShowSideBar;

    // Call this method when you need to show the side bar.
    public void OnShowSideBar()
    {
        var s = this.ShowSideBar;
        if (s != null)
        {
            s(this, EventArgs.Empty);
        }
    }
}

public class MainWindow : Window
{
    public MainWindow()
    {
        this.InitializeComponent();
        this.FirstControl.ShowSideBar += (s, e) =>
        {
            this.SecondControl.Visibility = Visibility.Visible;
        }
    }
}

我修复了初始化组件,但正在更改

X:Class=“AdminTools.MainWindow.ShowSideBar”到X:Class=“AdminTools.MainWindow”

现在我有一个问题在哪里

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:User="clr-namespace:AdminTools.Controls.User"
        xmlns:Custom="clr-namespace:AdminTools.Controls.Custom"
        xmlns:Bindings="clr-namespace:AdminTools.Functions"
        x:Class="AdminTools.MainWindow"
        Title="MainWindow" Height="691.899" Width="1500"

    >
    <Window.DataContext>
        <Bindings:ShowSideBar />
    </Window.DataContext>

<Bindings:ShowSideBar /> = ShowSideBar does not exist in the namespace clr-namespace:AdminTools.Functions

=ShowSideBar在命名空间clr命名空间中不存在:AdminTools.Functions

ShowSideBar:成员名称不能与其封闭类型相同。

@user3091374,请注意。。。dependency属性的TYPEOF基于自定义类,而不仅仅是派生类的泛型“UserControl”。