StyleSelector и возврат стиля из XAML - PullRequest
4 голосов
/ 01 марта 2012

Я создал стиль в XAML. Как я могу вернуть этот стиль в селекторе стилей (код)?

Я создал стиль в XAML и хочу вернуть только тот стиль, который объявлен в XAML.

Ответы [ 3 ]

12 голосов
/ 13 января 2014

Вы можете добавить свойство к вашему StyleSelector, а затем использовать это свойство для передачи ссылки на Style в XAML.

public class MyStyleSelector : StyleSelector
{
    private Style styleToUse;

    public Style StyleToUse
    {
        get { return styleToUse; }
        set { styleToUse = value; }
    }

    public override Style SelectStyle(object item, DependencyObject container)
    {
        return styleToUse;
    }
}

<Control StyleSelector="{DynamicResource myStyleSelector}">
    <Control.Resources>
        <Style x:Key="myStyle">
        ...
        </Style>
        <local:MyStyleSelector x:Key="myStyleSelector" StyleToUse="{StaticResource myStyle}"/>
    </Control.Resources>
</Control>
7 голосов
/ 01 марта 2012

Вам необходимо получить доступ к ресурсу XAML, где вы сохранили стиль.Как правило, они могут сделать это, сохранив его в отдельном файле ресурсов.Затем вам нужно получить доступ к URI этого файла XAML как объект ResourceDictionary.Вот пример, где я использую конвертер, чтобы решить, какой стиль получит элемент.

namespace Shared.Converters
{
  public class SaveStatusConverter : IValueConverter
  {

    public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {

      bool? saveState = (bool?)value;
      Uri resourceLocater = new Uri("/Shared;component/Styles.xaml", System.UriKind.Relative);
      ResourceDictionary resourceDictionary = (ResourceDictionary)Application.LoadComponent(resourceLocater);
      if (saveState == true)
        return resourceDictionary["GreenDot"] as Style;
      if (saveState == false)
        return resourceDictionary["RedDot"] as Style;
      return resourceDictionary["GrayDot"] as Style;

    }

    public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
      throw new System.NotImplementedException();
    }
  }
}
2 голосов
/ 01 марта 2012

Если вы просто ищете пример, вот сравнительно пригодный для использования:

http://www.shujaat.net/2010/10/wpf-style-selector-for-items-in.html

Если у вас есть более конкретные вопросы, я бы предложил опубликовать некоторый код / ​​XAML дляукажите, что вы пробовали и какие у вас проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...