2011-06-23 198 views
0

我有一個客戶用戶控件是一個標記TextBoxBorder纏繞在Label並與TextBox一個TextBox重疊標籤)。我發現很少(工作)的例子,說明如何從我的UserControl調用0123'函數。WPF用戶控件與文本框,使用TextChanged事件C#

只是文本框片段:

<TextBox 
FontSize="{Binding Path=DefaultFontSize}" 
Style="{StaticResource WatermarkTextBox}" 
Padding="{Binding Path=TextPadding}" 
Tag="{Binding Path=TextValue}" 
/> 

我曾嘗試使用RoutedEventHandler就像我跟我的按鈕的Click事件做了,但沒有奏效。我如何獲得它,所以當我們說我需要它的窗口上使用:

<MyControl:LabeledTextBox 
    TextBoxChange="Some_Event" 
    TextValue="{Binding SomethingOrOther}" 
/> 

,它會正確地火過做必要的功能

+0

你說你想爲你的UserControl定義一個事件並掛鉤它?或者你希望你的綁定能夠正常工作?或其他東西> –

回答

1

如果您正在使用MVVM(或者,如果你TextValue綁定綁定到你可以獲得和編輯的東西),你可以把你想要執行的邏輯放在setter中。

因此,可以說,你是綁定到一個屬性MyTextBoxValue。在XAML中將綁定模式設置爲兩種方式,並在setter中將邏輯或調用放到另一個方法中。

如果您希望代碼在每次鍵入時觸發,請在XAML中設置UpdateSourceTrigger=PropertyChanged,如果您希望代碼只在文本輸入「完成」時觸發,請設置爲UpdateSourceTrigger=LostFocus

3

這個問題真的不清楚。您是否希望用戶控件支持在中的文本更改時引發的TextChanged事件?如果是這樣,你需要在代碼隱藏中實現它。

首先,聲明事件:

public event TextChangedEventHandler TextChanged; 

然後,添加一個事件處理程序TextBox

<TextBox TextChanged="TextBox_TextChanged" ... /> 

,並在後臺代碼:

private void TextBox_TextChanged(object sender, TextChangedEventArgs args) 
{ 
    TextChangedEventHandler h = TextChanged; 
    if (h != null) 
    { 
     h(this, args); 
    } 
}