选择Dynamic Combobox

时间:2014-01-30 04:26:20

标签: c# wpf

我有一个组合框,其中有一天的时间作为其项目。我试图通过使用转换器根据当天的时间段制作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资源中使用样式。

如果我的目标是组合框,但如果我添加了一个x:类并且使用了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>

有谁知道如何才能让它发挥作用?

谢谢Callum

1 个答案:

答案 0 :(得分: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>

谢谢Callum