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

Код: 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
WPF: Конвертер, Background
    #39674815
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эмм...
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
WPF: Конвертер, Background
    #39674821
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, о, спасибо, запутался в этих пространствах )
...
Рейтинг: 0 / 0
WPF: Конвертер, Background
    #39675341
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раз уж есть топик моего тупления, спрошу тут, чтобы не плодить

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

В каком случае проявится разница с
Код: xml
1.
<Bla SomePropery="{StaticResource SomeResource}" />
...
Рейтинг: 0 / 0
WPF: Конвертер, Background
    #39675360
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
WPF: Конвертер, Background
    #39675368
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны1. Во втором случае просто не будет создано никакого биндинга
2. Таким образом (через StaticResource без Binding) можно присваивать в разметке значения свойствам, которые не являются DependencyProperty.Это-то понятно, вопрос в том, в чем преимущество использования байндинга к ресурсу (1), вместо простого присвоения ресурса свойству (2). В каких случаях это желательно или необходимо?
...
Рейтинг: 0 / 0
WPF: Конвертер, Background
    #39675408
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProСон Веры Павловны1. Во втором случае просто не будет создано никакого биндинга
2. Таким образом (через StaticResource без Binding) можно присваивать в разметке значения свойствам, которые не являются DependencyProperty.Это-то понятно, вопрос в том, в чем преимущество использования байндинга к ресурсу (1), вместо простого присвоения ресурса свойству (2). В каких случаях это желательно или необходимо?
В данном случае, видимо, никакого. В более общем случае - биндинг более гибок (позволяет задать путь, конвертер, итд итп).
...
Рейтинг: 0 / 0
WPF: Конвертер, Background
    #39675409
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В интернетах вот тоже пишут ( например ), что разница есть, когда в биндинге указывается еще что-то помимо Source, а когда указан только Source на основании StaticResource, разницы никакой.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF: Конвертер, Background
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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