Можно использовать IValueConverter для этого:
<TextBlock>
<TextBlock.Resources>
<conv:IsNullConverter x:Key="isNullConverter"/>
</TextBlock.Resources>
<TextBlock.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding SomeField, Converter={StaticResource isNullConverter}}" Value="False">
<Setter Property="TextBlock.Text" Value="It's NOT NULL Baby!"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
, Где IsNullConverter определяется в другом месте (и conv установлен сослаться на его пространство имен):
public class IsNullConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (value == null);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new InvalidOperationException("IsNullConverter can only be used OneWay.");
}
}
А более общее решение состояло бы в том, чтобы реализовать IValueConverter, который проверяет на равенство с ConverterParameter, таким образом, можно проверить по чему-либо, и не просто пустому указателю.
Вы не можете этого сделать. Наиболее вероятным решением, которое вы найдете «где-то там», будет добавление окружающего диапазона с жестко запрограммированным стилем, но ни IE (7), ни Firefox (3.0.12) этого не соблюдают. Фактически, если вы посмотрите на сгенерированный исходный код в Firefox, внутренний диапазон будет полностью удален.
Что вы можете сделать, так это использовать решение JavaScript, чтобы создать видимость выбора без фактического использования select.
РЕДАКТИРОВАТЬ: И вот отличный HOWTO о том, как это сделать: http://www.devirtuoso.com/2009/08/styling-drop-down-boxes-with-jquery/
Невозможно или, по крайней мере, не работают кросс-браузеры. Если вам это действительно нужно, вы можете создать собственное раскрывающееся меню, но я бы не рекомендовал его.