StyleSelector.SelectStyle(Object, DependencyObject) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
При переопределении в производном классе возвращает Style на основе пользовательской логики.
public:
virtual System::Windows::Style ^ SelectStyle(System::Object ^ item, System::Windows::DependencyObject ^ container);
public virtual System.Windows.Style SelectStyle (object item, System.Windows.DependencyObject container);
abstract member SelectStyle : obj * System.Windows.DependencyObject -> System.Windows.Style
override this.SelectStyle : obj * System.Windows.DependencyObject -> System.Windows.Style
Public Overridable Function SelectStyle (item As Object, container As DependencyObject) As Style
Параметры
- item
- Object
Содержимое.
- container
- DependencyObject
Элемент, к которому будет применен стиль.
Возвращаемое значение
Возвращает свойственный приложению стиль для применения; в противном случае null
.
Примеры
В следующем примере показано, как определить объект StyleSelector , определяющий Style строку. В этом примере определяется Background цвет в соответствии с индексом строки.
public class ListViewItemStyleSelector : StyleSelector
{
public override Style SelectStyle(object item,
DependencyObject container)
{
Style st = new Style();
st.TargetType = typeof(ListViewItem);
Setter backGroundSetter = new Setter();
backGroundSetter.Property = ListViewItem.BackgroundProperty;
ListView listView =
ItemsControl.ItemsControlFromItemContainer(container)
as ListView;
int index =
listView.ItemContainerGenerator.IndexFromContainer(container);
if (index % 2 == 0)
{
backGroundSetter.Value = Brushes.LightBlue;
}
else
{
backGroundSetter.Value = Brushes.Beige;
}
st.Setters.Add(backGroundSetter);
return st;
}
}
Public Class ListViewItemStyleSelector
Inherits StyleSelector
Public Overrides Function SelectStyle(ByVal item As Object, ByVal container As DependencyObject) As Style
Dim st As New Style()
st.TargetType = GetType(ListViewItem)
Dim backGroundSetter As New Setter()
backGroundSetter.Property = ListViewItem.BackgroundProperty
Dim listView As ListView = TryCast(ItemsControl.ItemsControlFromItemContainer(container), ListView)
Dim index As Integer = listView.ItemContainerGenerator.IndexFromContainer(container)
If index Mod 2 = 0 Then
backGroundSetter.Value = Brushes.LightBlue
Else
backGroundSetter.Value = Brushes.Beige
End If
st.Setters.Add(backGroundSetter)
Return st
End Function
End Class
В следующем примере показано, как определить объект ResourceKey для StyleSelector. Префикс namespc
сопоставляется с пространством имен СРЕДЫ CLR и соответствующей сборкой StyleSelector , в которой определена. Дополнительные сведения см. в разделе "Пространства имен XAML" и "Сопоставление пространств имен" для XAML WPF.
<namespc:ListViewItemStyleSelector x:Key="myStyleSelector"/>
В следующем примере показано, как задать ItemContainerStyleSelector для этого StyleSelector ресурса свойствоListView.
<ListView
ItemsSource="{Binding Source={StaticResource EmployeeData},
XPath=Employee}"
ItemContainerStyleSelector="{DynamicResource myStyleSelector}" >
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding XPath=FirstName}"
Header="First Name" Width="120"/>
<GridViewColumn DisplayMemberBinding="{Binding XPath=LastName}"
Header="Last Name" Width="120"/>
<GridViewColumn DisplayMemberBinding="{Binding XPath=FavoriteCity}"
Header="Favorite City" Width="120"/>
</GridView>
</ListView.View>
</ListView>
Пример создания селектора для выбора определенного ресурса стиля см. в реализации, позволяющей DataTemplateSelector.SelectTemplateиспользовать пользовательскую логику для выбора DataTemplateна основе аналогичной концепции.
Комментарии
Чтобы создать StyleSelector стиль, основанный на пользовательской логике, создайте подкласс StyleSelector класса и реализуйте SelectStyle метод.