1

我创建了一个包含一些控件(按钮和复选框)的 UserControl。

之后,我在 WPF Windows 中添加了对该 UserControl 的引用。

我想要做的是:当我单击 UserControl 中的按钮时,此按钮会触发一个操作并更改 Windows 中的某些内容(Textbox1.Text =“某事”)。

我的问题是我无法从 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>
4

3 回答 3

2

有几种方法可以处理这种“交流”……这里只是一些方法……还有更多:

1) 定义一个命令……当你的按钮被点击时,它会升起。

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

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

2)定义一个RoutedEvent(冒泡一个),它会在树上冒泡,然后一个Window可以处理它。该事件将由您在 UserControl 中的 Button 引发,并包含您希望在 Window 中设置的“文本”。

3)如果您的“某物”是一种“状态”指示器......那么您可以在您的 UserControl 上提供一个“状态”属性(或者另一个选项有一个包含状态数据的 ViewModel)。然后,您的 TextBox 可以绑定到您的 UserControl(或 ViewModel)上的该属性以获得“状态”(作为一个值,然后使用转换器将其“转换”为可显示的消息,或作为直接字符串)。

于 2012-09-13T12:04:59.700 回答
1

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

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

于 2012-09-13T12:05:25.113 回答
0

创建用户控件时,您必须将句柄传递给主窗口。然后,您必须在从用户控件调用的主窗口中创建公共方法,并更改文本框中的值。

于 2012-09-13T12:03:12.663 回答