Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: Конвертер, Background / 8 сообщений из 8, страница 1 из 1
17.07.2018, 08:20
    #39674801
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Конвертер, Background
Коллеги, я буквально заблудился в трех соснах, не могу понять, что я сделал не так

Код: xml
1.
2.
3.
4.
5.
  <Window.Resources>
    <local:BrushNullable x:Key="BrushNullable" />
  </Window.Resources>
  <Border x:Name="Border" Width="100" Height="200" Background="{Binding ElementName=Border, Path=Name, Converter={StaticResource BrushNullable}}">
  </Border>

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	public class BrushNullable : IValueConverter
	{
		public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
		{
			return new SolidBrush(System.Drawing.Color.Aqua);
		}

		public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
		{
			throw new NotImplementedException();
		}
	}



Ожидается голубой фон, по факту отсутствует (или прозрачный)
...
Рейтинг: 0 / 0
17.07.2018, 09:00
    #39674815
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Конвертер, Background
Эмм...
Shocker.Pro
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	public class BrushNullable : IValueConverter
	{
		public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
		{
			return new SolidBrush(System.Drawing.Color.Aqua);
		}

		public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
		{
			throw new NotImplementedException();
		}
	}


- а нужен SolidColorBrush (из System.Windows.Media), и на основании System.Windows.Media.Color.
...
Рейтинг: 0 / 0
17.07.2018, 09:09
    #39674821
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Конвертер, Background
А, о, спасибо, запутался в этих пространствах )
...
Рейтинг: 0 / 0
18.07.2018, 05:16
    #39675341
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Конвертер, Background
Раз уж есть топик моего тупления, спрошу тут, чтобы не плодить

Для чего нужна конструкция (при неуказанном Path)
Код: xml
1.
<Bla SomePropery="{Binding Source={StaticResource SomeResource}}" />

В каком случае проявится разница с
Код: xml
1.
<Bla SomePropery="{StaticResource SomeResource}" />
...
Рейтинг: 0 / 0
18.07.2018, 07:13
    #39675360
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Конвертер, Background
1. Во втором случае просто не будет создано никакого биндинга
2. Таким образом (через StaticResource без Binding) можно присваивать в разметке значения свойствам, которые не являются DependencyProperty.
Пример:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
<Window.Resources>
  <SolidColorBrush Color="#89ABCD" x:Key="Brush"/>
</Window.Resources>
<Grid>
  <Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition />
    <RowDefinition Height="Auto"/>
  </Grid.RowDefinitions>
  <Border
    x:Name="Border1"
    VerticalAlignment="Stretch"
    HorizontalAlignment="Stretch"
    Margin="20"
    Background="{StaticResource Brush}" />
  <wpftest2:MyBorder
    x:Name="Border2"
    Grid.Row="1"
    VerticalAlignment="Stretch"
    HorizontalAlignment="Stretch"
    Margin="20"
    Background="{Binding Source={StaticResource Brush}}"
    SomeOtherBackground="{StaticResource Brush}"/> <!-- Ok -->
  <Button
    Grid.Row="2"
    VerticalAlignment="Center"
    HorizontalAlignment="Center"
    Margin="10"
    Padding="5"
    Content="Test"
    Click="ButtonClick" />
</Grid>


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public partial class MainWindow
{
  public MainWindow()
  {
    InitializeComponent();
  }

  void ButtonClick(object sender, RoutedEventArgs e)
  {
    var b1 = BindingOperations.GetBinding(Border1, Border.BackgroundProperty);
    Console.WriteLine("Binding of {{StaticResource Brush}}: {0}", b1 ?? (object)"null");
    var b2 = BindingOperations.GetBinding(Border2, Border.BackgroundProperty);
    Console.WriteLine("Binding of {{Binding Source={{StaticResource Brush}}}}: {0}", b2 ?? (object)"null");
  }
}

public class MyBorder : Border
{
  public Brush SomeOtherBackground { get; set; }
}


Вывод по нажатию кнопки:
Код: plaintext
1.
Binding of {StaticResource Brush}: null
Binding of {Binding Source={StaticResource Brush}}: System.Windows.Data.Binding
...
Рейтинг: 0 / 0
18.07.2018, 07:32
    #39675368
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Конвертер, Background
Сон Веры Павловны1. Во втором случае просто не будет создано никакого биндинга
2. Таким образом (через StaticResource без Binding) можно присваивать в разметке значения свойствам, которые не являются DependencyProperty.Это-то понятно, вопрос в том, в чем преимущество использования байндинга к ресурсу (1), вместо простого присвоения ресурса свойству (2). В каких случаях это желательно или необходимо?
...
Рейтинг: 0 / 0
18.07.2018, 08:29
    #39675408
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Конвертер, Background
Shocker.ProСон Веры Павловны1. Во втором случае просто не будет создано никакого биндинга
2. Таким образом (через StaticResource без Binding) можно присваивать в разметке значения свойствам, которые не являются DependencyProperty.Это-то понятно, вопрос в том, в чем преимущество использования байндинга к ресурсу (1), вместо простого присвоения ресурса свойству (2). В каких случаях это желательно или необходимо?
В данном случае, видимо, никакого. В более общем случае - биндинг более гибок (позволяет задать путь, конвертер, итд итп).
...
Рейтинг: 0 / 0
18.07.2018, 08:33
    #39675409
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF: Конвертер, Background
В интернетах вот тоже пишут ( например ), что разница есть, когда в биндинге указывается еще что-то помимо Source, а когда указан только Source на основании StaticResource, разницы никакой.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: Конвертер, Background / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]