2010-10-10 100 views
2

我有一個FlowDocument(在RichTextBox之內),其中包含UIElement控件,如CheckBox es。我需要的用戶可以點擊CheckBox選擇它來改變控件的屬性,如標籤,背景顏色等在FlowDocument中選擇一個WPF UIElement

我的問題是,當我點擊它,它只是檢查,或取消選中CheckBox正如你所期望的那樣。如何在點擊時讓CheckBox顯示一個邊框,而不是更改選中的值。使IsEnabled屬性爲false意味着我根本無法訪問控件,因此無法識別。

我想我試圖實現的最簡單的解釋類似於Expression Blend或Visual Studio視覺設計器。當用戶點擊一個CheckBox它被選中,而不是選中的值切換。

我嘗試過爲此搜索,但不知道繼續進行的方向。任何幫助,將不勝感激。

回答

0

這個答案並不令人滿意,但除了構建自定義的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)這不是真的建立性能

+1

答案(我已經發現)是使用裝飾者。它們完全是爲此目的而設計的。只需要深入挖掘它們,因爲我還沒有太多的經驗。 – dgwyer 2010-10-12 09:14:02

+0

我可能也必須深入研究這些。 :)謝謝你的提醒 – Semyazas 2010-10-12 09:59:53

+0

在flowdocs上繪製裝飾物? – 2012-08-31 19:49:25