2012-09-13 38 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中處理該事件。在這種情況下,做你想要的東西你的窗口