2013-05-05 127 views
2

我有一個奇怪的問題,我目前正在試圖造型一SingleUpDown控制(從擴展WPF工具包)與觸發設置對象屬性WPF

這是當前的風格,做工作:

<xctk:SingleUpDown> 
    <xctk:SingleUpDown.Style> 
     <Style TargetType="xctk:SingleUpDown">  
      <Style.Triggers> 
       <DataTrigger Binding="{Binding _ThresoldLocked}" Value="True"> 
        <Setter Property="Value" Value="2"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </xctk:SingleUpDown.Style> 
</xctk:SingleUpDown> 

雖然這兩個例子的工作就像一個魅力:

<xctk:SingleUpDown> 
    <xctk:SingleUpDown.Style> 
     <Style TargetType="xctk:SingleUpDown">  
      <Style.Triggers> 
       <DataTrigger Binding="{Binding _ThresoldLocked}" Value="True"> 
        <Setter Property="Background" Value="Red"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </xctk:SingleUpDown.Style> 
</xctk:SingleUpDown> 

或者

<xctk:SingleUpDown> 
    <xctk:SingleUpDown.Style> 
     <Style TargetType="xctk:SingleUpDown">  
      <Setter Property="Value" Value="2"/> 
     </Style> 
    </xctk:SingleUpDown.Style> 
</xctk:SingleUpDown> 

我在做什麼錯第一個風格? 有在輸出窗口中沒有錯誤..

編輯: 這是我的極簡例如: http://i.stack.imgur.com/EzxBP.png Screenshot

+0

所有樣式看起來像他們將工作(結合這些實例),你真的只使用代碼所示? – 2013-05-05 18:38:28

+0

是的,我已經用截圖更新了我的問題。 如果我按下「向上」或「向下」箭頭,或者只是輸入一個數字,它就可以正常工作。 – Jamby 2013-05-05 18:51:06

回答

0

我使用擴展WPF工具包,但我沒有SingleUpDown那裏,但你可能說話關於與此不同的版本是:http://wpftoolkit.codeplex.com/。我在那裏DoubleUpDown和你的不起作用的風格適合我。

+0

不能。即使有DoubleUpDown我也無法得到它的工作..無論如何,SingleUpDown文檔在這裏找到:http://wpftoolkit.codeplex.com/wikipage?title=SingleUpDown – Jamby 2013-05-05 18:44:11

+0

是的。我也發現了這一點。但是,如果我明白了,它只是在付費版本?但奇怪的是,它適用於我而不適合你。 – Artholl 2013-05-05 18:48:55

1

通常,當涉及樣式和觸發器時,人們不知道precedence,即本地值等等完全覆蓋樣式。鑑於你沒有在控件上設置任何屬性,所有樣式應該工作。

因此,例如,如果您將Value設置在您的控件上(<xctk:SingleUpDown Value="0">...),則觸發器不執行任何操作,您會將默認設置移動到Setter

<xctk:SingleUpDown> 
    <xctk:SingleUpDown.Style> 
     <Style TargetType="xctk:SingleUpDown"> 
      <Setter Property="Value" Value="<default here>"/> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding _ThresoldLocked}" Value="True"> 
        <Setter Property="Value" Value="2"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </xctk:SingleUpDown.Style> 
</xctk:SingleUpDown> 

編輯:

我對該控件的行爲的觀察。如果您有如上所示的設置,則觸發器將起作用,因此在此需要默認設置器。

另外你應該注意操作該值可能會將其設置在本地,從而覆蓋觸發器的任何進一步效果。您可以使用動畫代替觸發器來解決此問題,因爲它們的優先級最高,但這可能會導致無法進行任何手動操作。

也許您應該將您的邏輯從UI中移開,並將Value直接綁定到視圖模型/模型上的屬性,例如,

private bool _ThresholdLocked; 
public bool ThresholdLocked 
{ 
    get { return _ThresholdLocked; } 
    set 
    { 
     if (value != _ThresholdLocked) 
     { 
      _ThresholdLocked= value; 
      OnPropertyChanged("ThresholdLocked"); 
      OnPropertyChanged("Value"); //Value is also affected 
     } 
    } 
} 

private float _Value; 
public float Value 
{ 
    get 
    { 
     if (ThresholdLocked) 
      return 2.0f; 

     return _Value; 
    } 
    set 
    { 
     if (value != _Value) 
     { 
      _Value = value; 
      OnPropertyChanged("Value"); 
     } 
    } 
} 
+0

我的xaml中沒有設置Value屬性.. – Jamby 2013-05-05 18:53:31

+0

@Jamby:查看我的答案的一些更改。我也認爲控制是有點壞,這很容易爲我知道的很多其他控件工作... – 2013-05-05 20:56:12

+0

@Jamby:順便說一句,你的「閾值」似乎缺乏「h」。 – 2013-05-05 20:59:39