這個答案並不令人滿意,但除了構建自定義的ControlTemplate
之外,這是最簡單的(儘管可能最醜)。
通過「EINS」的名義假設我們有一個CheckBox
我們將使用3個事件,以確定其狀態:
public void eins_Click(object sender, RoutedEventArgs e)
{
var _sender = sender as CheckBox;
if (_sender.Tag == null || _sender.Tag.ToString() != "pressedOnce")
{
_sender.Tag = "pressedOnce";
_sender.IsChecked = false;
testStack.Children.Remove(_sender);
Border border = new Border()
{
BorderThickness = new Thickness(2),
BorderBrush = new SolidColorBrush(Colors.Cyan),
};
border.Child = _sender;
testStack.Children.Insert(0, border);
}
else
{
_sender.IsChecked = true;
}
}
private void eins_LostFocus(object sender, RoutedEventArgs e)
{
var _sender = sender as CheckBox;
_sender.Tag = "";
var border = _sender.Parent as Border;
border.Child = null;
testStack.Children.Remove(border);
testStack.Children.Insert(0,_sender);
}
private void eins_Checked(object sender, RoutedEventArgs e)
{
DispatcherTimer timer = new DispatcherTimer()
{
Interval = new TimeSpan(0,0,1)
};
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
if (eins.IsChecked == true)
{
//do whatever you want to do
}
}
現在,這更多的是一種變通方法解決方案,並有幾個缺點:
1)你需要確保這個盒子從不被檢查超過1秒,否則你需要提高TimeSpan
2)你總是需要知道什麼類型的控件是複選框的實際父母
3)你需要完成檢查錯誤,這可能不會開箱即用
4)這不是真的建立性能
答案(我已經發現)是使用裝飾者。它們完全是爲此目的而設計的。只需要深入挖掘它們,因爲我還沒有太多的經驗。 – dgwyer 2010-10-12 09:14:02
我可能也必須深入研究這些。 :)謝謝你的提醒 – Semyazas 2010-10-12 09:59:53
在flowdocs上繪製裝飾物? – 2012-08-31 19:49:25