以前都在使用winform,現在換成WPF遇到些問題,還請各位指教,謝謝
目前使用WPF設計了一個radiobutton自定義控件,其中包含一個textblock和textbox
當這個radiobutton被點兩下就把textblock隱藏並把textbox顯示,同時textbox內容會和textblock一樣
<RadioButton
x:Name="Radiobutton1"
Background="{x:Null}"
Margin="5"
>
<StackPanel>
<StackPanel x:Name="StackPanel1" Orientation="Horizontal">
<TextBlock
x:Name="NameTextBlock1"
Width="80"
Margin="4,2,4,0"
VerticalAlignment="Center"
FontSize="10"
MouseLeftButtonDown="TextBlock_MouseLeftButtonDown"
Background="{x:Null}"
Text="{Binding Text, RelativeSource={RelativeSource AncestorType={x:Type local:EditRadiobutton}}}">
</TextBlock>
<TextBox
x:Name="NameTextBox1"
Width="80"
Margin="0,0,0,0"
HorizontalAlignment="Left"
KeyDown="PortNameTextBox_KeyDown"
LostFocus="PortNameTextBox_LostFocus"
MaxLength="6"
MaxLines="1"
Background="{x:Null}"
Visibility="Collapsed" />
</StackPanel>
</StackPanel>
</RadioButton>
這是雙擊文字方塊後的事件,SetControl是抓textBox使用的,不確定是不是這部分有衝突
private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
SetControl(sender);
e.Handled = true;
textBox.Text = textBlock.Text;
textBox.Visibility = Visibility.Visible;
textBlock.Visibility = Visibility.Collapsed;
textBox.Focus();
}
但我在使用這個控件的頁面C#部分,使用以下程式碼指派事件,卻無法執行RadioButton_Checked,但雙擊修改文字的功能還在
customRadio.Checked += RadioButton_Checked;
想請問應該怎麼修改才能實現單擊執行RadioButton_Checked事件,雙擊執行修改內容事件,謝謝各位
這我有遇過,你這裡的語法看起來是code behind的寫法,目前我只能猜不確定該程式碼會不會執行到,你可以試著把它寫在xaml內,看能否解決你的問題,xaml是會在載入時由InitializeComponent()執行,可確定一定會被執行到。
針對不同的Event,我有用手頭的專案測試過了,但這會有莫名的干擾問題,建議改如下語法。
示範如下:
<RadioButton
x:Name="CombinOption"
GroupName="DataShow"
IsChecked="True"
MouseRightButtonDown="Radio_MouseLeftButtonDown"
MouseDoubleClick="Radio_MouseDoubleClick" />
如果要採用Code behind 請使用匿名函式加入,作法如下(請同時加入),要閃開原有的Checked 事件,因為它包含了MouseLeftButtonDown等幾個事件,會有干擾,不然就換個物件使用。
// 用滑鼠右鍵
CombinOption.MouseRightButtonDown += (Object sender, MouseButtonEventArgs e) =>
{
MessageBox.Show(e.OriginalSource.ToString(), "Right");
};
// 用滑鼠雙擊
CombinOption.MouseDoubleClick += (Object sender, MouseButtonEventArgs e) =>
{
MessageBox.Show(e.OriginalSource.ToString(), "Double");
};
非常感謝,測試了一下可以跳出MessageBox了,我在改成我要的試試看,如果有問題還方便幫忙解答嗎?
剛才測試右鍵、滑鼠雙擊都可以正常執行,所以換成左鍵MouseLeftButtonDown嘗試,卻沒有辦法辦法跳出messagebox
editRadio.MouseRightButtonDown += (Object sender, MouseButtonEventArgs e) =>
{
MessageBox.Show(e.OriginalSource.ToString(), "Right");
};
editRadio.MouseDoubleClick += (Object sender, MouseButtonEventArgs e) =>
{
MessageBox.Show(e.OriginalSource.ToString(), "Double");
};
editRadio.MouseLeftButtonDown += (Object sender, MouseButtonEventArgs e) => {
MessageBox.Show(e.OriginalSource.ToString(), "Left");
};
我有測試出來 左鍵是不行的
如果要採用Code behind 請使用匿名函式加入,作法如下(請同時加入),要閃開原有的Checked 事件,因為它包含了MouseLeftButtonDown等幾個事件,會有干擾,不然就換個物件使用。
MouseLeftButtonDown Checked 這兩個 Event 會和 DoubleClick相互干擾