我的表單上的某些複選框不應該能夠被用戶選中/取消選中。有沒有辦法讓我在Checbox的Check事件觸發前取消事件?是否有預檢WPF複選框?
中的WinForms它很容易,只是
public void cb_BeforeChecked(object sender, EventArgs e){
e.Handled = true;
}
,但我不能找到這樣的WPF什麼...我想你也許可以做到這一點,就需要做一些花哨..
謝謝!
我的表單上的某些複選框不應該能夠被用戶選中/取消選中。有沒有辦法讓我在Checbox的Check事件觸發前取消事件?是否有預檢WPF複選框?
中的WinForms它很容易,只是
public void cb_BeforeChecked(object sender, EventArgs e){
e.Handled = true;
}
,但我不能找到這樣的WPF什麼...我想你也許可以做到這一點,就需要做一些花哨..
謝謝!
爲什麼不只是設置IsEnabled="False"
?
IsEnabled使複選框變灰。有時你想讓它看起來那樣,有時候你不會。 –
@Bahri:從用戶體驗的角度來看,如果你不允許檢查它,它應該提供視覺反饋。這與Windows的其餘部分一起討論,在UX中一致性也是一個好主意。這是默認行爲的原因。如果你不喜歡灰色,你也可以重新設計它。 –
ya。它實際上更加令人滿意! :) – Toadums
您可以設置IsHitTestVisible =「False」使其不響應用戶點擊。否則,如果viewmodel邏輯確定它是否可點擊,則可以將其綁定到命令。
<Grid>
<CheckBox IsHitTestVisible="False" Content="I cannot be clicked at all"/>
<CheckBox Command="{Binding DoSomethingCommand}" Content="I can be clicked if DoSomethingCanExecute returns true."/>
</Grid>
在你的DataContext(視圖模型或其他方式):
RelayCommand _DoSomethingCommand = null;
public ICommand DoSomethingCommand
{
get
{
if (_DoSomethingCommand== null)
{
_DoSomethingCommand= new RelayCommand(
param => DoSomething(),
param => DoSomethingCanExecute
);
}
return _DoSomethingCommand;
}
}
public bool DoSomethingCanExecute
{
get
{
return CheckboxShouldBeEnabled();
}
}
public void DoSomething()
{
//Checkbox has been clicked
}
毫米,我沒有使用DataContext。複選框只在treenodes的頭文件中,以便可以選中/取消選中樹節點 – Toadums
我明白。但是,通過使用WinForms事件驅動的編程範例,您錯過了WPF的許多強大功能。您可能會對MVVM的力量感到驚訝。 –
這可能是有點矯枉過正,但你可以子類複選框,然後覆蓋的OnClick()方法。
只有設置IsHitTestVisible="False"
只是照顧鼠標,用戶仍然可以使用鍵盤選項卡到CheckBox
並更改值。
你應該同時設置IsHitTestVisible="False"
和Focusable="False"
禁用鍵盤以及
這是真的。我忘了鍵盤。 –
您可以禁用該複選框,如果禁用的外觀是一個問題,一個風格與殘疾人複選框關聯。正如它在之前的文章中指出的那樣,對於不同的國家有不同的看法。
爲什麼不只是設置'IsReadOnly =「True」'? – Rachel
如果我可以選擇你的評論作爲答案,我會!除了複選框沒有IsReadOnly屬性,所以我使用了IsEnabled,它的效果更好,因爲如果它沒有被啓用,它就會使框變灰。謝謝! – Toadums
我發佈了它作爲答案:)雖然你是對的,我忘了CheckBoxes沒有IsReadOnly屬性,你需要使用IsEnabled – Rachel