我创建了一个UserControl,其中包含一些conrols(按钮和复选框)。
之后我在WPF Windows中添加了对UserControl的引用。
我想要做的是:当我点击UserControl中的按钮时,此按钮会触发一个动作并更改Windows中的某些内容(Textbox1.Text =“something”)。
我的问题是我无法从UserControl访问Windows内的控件。
请帮忙吗?
EDIT
:添加了代码示例
<s:SurfaceWindow x:Class="Project.Temp.MainSurface"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:s="http://schemas.microsoft.com/surface/2008"
xmlns:local="clr-namespace:Project"
Title="Project.Temp"
>
<Grid x:Name="Root" ... >
<Grid x:Name="Child" ... >
<local:MyUserControl x:Name="UserControlStart" ... />
</Grid>
...
</Grid>
答案 0 :(得分:2)
有几种方法可以实现这种“沟通”...这里只是一些方法......还有更多:
1)定义一个命令...单击它时按钮将会引发。
然后在您的Window中,您将处理该命令,并将TextBox更改为某个字符串。
如果要提供某些数据/上下文,可以使用CommandParame。
2)定义一个RoutedEvent(冒泡),它会在树上冒泡,然后Window可以处理它。该事件将由UserControl中的Button引发,并包含您希望在窗口中设置的“文本”。
3)如果你的“某事”是某种“状态”指示符......那么你可以在你的UserControl上提供一个“状态”属性(或者另一个选项有一个包含状态数据的ViewModel)。然后,您的TextBox可以绑定到UserControl(或ViewModel)上的该属性以获取“状态”(作为一个值,然后将其“转换”为带有转换器的可显示消息,或者作为直接字符串)。
答案 1 :(得分:1)
UserControl不应该能够更改Window相关的东西,因为UserControl是独立的实体。
在USerControl中公开一个事件并在Window中处理该事件。在那种情况下,你想要你的窗口
答案 2 :(得分:0)
创建usercontrol时,必须将句柄传递给主窗口。然后,您必须在主窗口中创建公共方法,您可以从用户控件中调用该方法,并更改文本框中的值。