2014-01-30 51 views
0

我有一個組合框,其中包含一天的時間段作爲其項目。我正在嘗試通過使用轉換器基於一天的時間段來使isSelected項目,但由於某種原因,我的代碼將無法工作。動態組合框被選中

下面是我的XAML:

<Window.Resources> 
    <staticData:SelectedPeriodConverter x:Key="SelectedPeriodConverter"/> 
</Window.Resources> 

<ComboBox Grid.Column="4" Margin="0,7" Width="100" HorizontalAlignment="Right" Name="PeriodPicker" VerticalAlignment="Top" Height="25" SelectedItem="PM"> 

    <ComboBoxItem>AM</ComboBoxItem> 
    <ComboBoxItem>PM</ComboBoxItem> 

    <ComboBox.ItemContainerStyle> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=Content, RelativeSource={RelativeSource Self}, Converter={StaticResource SelectedPeriodConverter}}" Value="True"> 
        <Setter Property="ComboBoxItem.IsEnabled" Value="False"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </ComboBox.ItemContainerStyle> 
</ComboBox> 

和我對轉換器的C#代碼如下:

public class SelectedPeriodConverter : IValueConverter 
{ 
    public object Convert(object values, Type targetType, object parameter, CultureInfo culture) 
    { 
     string test = values.ToString(); 

     if (test == DateTime.Now.ToString("tt")) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 

    } 

    public object ConvertBack(object value, Type targetTypes, object parameter, CultureInfo culture) 
    { 

     return value; 
    } 
} 

奇怪的是是,如果我改變isSelected到IsEnable會觸發否則它不會。

我試過的另一種方法是在Windows資源中使用樣式。

這工作,如果我瞄準comboboxitem,但不會工作,如果我添加一個x:class和使用ItemContainerStyle隔離觸發器到一個組合框,因爲我不希望它在我的窗體中的所有組合框。

<Style TargetType="{x:Type ComboBoxItem}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=Content, RelativeSource={RelativeSource Self}, Converter={StaticResource SelectedPeriodConverter}}" Value="True"> 
      <Setter Property="IsSelected" Value="True"/> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

<ComboBox Grid.Column="4" Margin="0,7" Width="100" HorizontalAlignment="Right" Name="PeriodPicker" VerticalAlignment="Top" Height="25" SelectedItem="PM"> 
    <ComboBoxItem>AM</ComboBoxItem> 
    <ComboBoxItem>PM</ComboBoxItem> 
</ComboBox> 

有誰知道我該如何得到這個工作?

感謝卡勒姆

回答

0

的修復很安靜簡單。

插入第二個代碼中ComboBox.Resources標籤而不是Windows.Resources標籤工作對我來說,像這樣:

<ComboBox.Resources> 
          <staticData:SelectedPeriodConverter x:Key="SelectedPeriodConverter"/> 

          <Style TargetType="{x:Type ComboBoxItem}"> 
           <Style.Triggers> 
            <DataTrigger Binding="{Binding Path=Content, RelativeSource={RelativeSource Self}, Converter={StaticResource SelectedPeriodConverter}}" Value="True"> 
             <Setter Property="IsSelected" Value="True"/> 
            </DataTrigger> 
           </Style.Triggers> 
          </Style> 



         </ComboBox.Resources> 

感謝卡勒姆