wpf применить staticresouce на основе данных - PullRequest
2 голосов
/ 25 сентября 2010

Как я могу применить статический ресурс по имени на основе данных?Я знаю, что могу написать триггер данных для свойств стиля, но я хочу применить весь стиль на основе связанных данных.

Пример:
if (условие) CellValuePresenterStyle = "{StaticResource OptionalFieldCellPresenter}" elseCellValuePresenterStyle = "{StaticResource RequiredFieldCellPresenter}"

Ответы [ 2 ]

2 голосов
/ 15 августа 2011

Вы можете написать собственный конвертер, чтобы позаботиться об этом.Класс Converter будет выглядеть следующим образом:

//''' <summary>
//''' Returns a Style  based upon the text that is passed into the Convert
//''' function in the 'value' object.
//''' </summary>
//''' <remarks></remarks>
Public Class NameToStyleConverter
   Implements IValueConverter

   Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
      Dim styleName As String = CStr(value)
      Dim styl As System.Windows.Style

      styl = Application.Current.TryFindResource(styleName)

      Return styl

   End Function

   Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
      Throw New NotImplementedException("This method or operation is not implemented.")
   End Function
End Class

В XAML для вашего окна вы получите следующее:

<Window.Resources>
    <local:NameToStyleConverter x:Key="NameToStyleConverter"/>
</Window.Resources>

, где 'local' - это определенное пространство имен для вашего приложения..

Реализация может выглядеть так:

Style="{Binding Path=MyStyleNameText, Converter={StaticResource NameToStyleConverter}"

Или, опционально, вы всегда можете обратиться к конвертеру из кода.Вы передаете строку, и она возвращает стиль.

1 голос
/ 25 сентября 2010

Применение стиля к родительскому элементу управления, похоже, что вы используете DataGrid со стандартным CellStyleTemplate.

Затем в Style.Triggers добавьте триггер данных, чтобы поменять стиль на другой стиль при выполнении условия

...