2012-09-13 39 views
1

我创建了一个包含一些控制(按钮和复选框)的UserControl。UserControl和Windows之间的相互作用

之后,我在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

当你创建你有一个句柄传递给你的主窗口的用户控件。然后,您必须在用户控件调用的主窗口中创建公用方法,并更改文本框中的值。

+0

请更多的解释! –

+0

你能发布创建usercontrol实例的代码吗?主窗口的名称是什么? – Jan

+0

用户控件决不应该依赖于其所有者的类型。 –

2

有几种方法可以解决这个“沟通” ......这里只是一些方法......有很多更多:

1)定义命令,你的按钮将提高时它被点击。

然后在您的窗口中,您将处理该命令,并将TextBox更改为某个字符串。

如果您想提供一些数据/上下文,则可以使用CommandParameter。

2)定义一个RoutedEvent(冒泡一个),冒泡树并且一个Window可以处理它。该事件将由您在UserControl中的按钮引发,并包含您希望在窗口中设置的“文本”。 3)如果你的“东西”是一种“状态”指示器......那么你可以在你的UserControl上提供一个“状态”属性(或者另一个选项有一个包含状态数据的ViewModel)。然后,您的TextBox可以绑定到您的UserControl(或ViewModel)上的该属性以获取“状态”(或者作为一个值,然后“转换”为带有转换器的可显示消息或直接字符串)。

1

UserControl不应该能够更改Window相关的东西,因为UserControl是独立的实体。

在USerControl中公开一个事件并在Window中处理该事件。在这种情况下,做你想要的东西你的窗口