powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Определить разные стили контрола в зависимости от степени его вложения в другие контролы
3 сообщений из 3, страница 1 из 1
Определить разные стили контрола в зависимости от степени его вложения в другие контролы
    #39401648
Vladimir2008
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть разметка XAML:
Код: c#
1.
2.
3.
4.
5.
6.
7.
<GroupBox>
     <StackPanel>
          <StackPanel>
               здесь контролы
          </StackPanel>
     </StackPanel>
<GroupBox>


Как описать стиль для StackPanel (возможно, на основе триггеров), чтобы установить свойство Margin для StackPanel в зависимости от степени его вложенности в GroupBox (без указания ключа x:Key стиля - т.е. чтобы действовал на все StackPanel)?
Т.е., для GroupBox/StackPanel (для него Margin=5) и GroupBox/StackPanel/StackPanel (для него Margin=10)?
...
Рейтинг: 0 / 0
Определить разные стили контрола в зависимости от степени его вложения в другие контролы
    #39401665
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через триггеры такое делать гемомрой, лучше через Converter и визуальное дерево, либо MarkupExtension
...
Рейтинг: 0 / 0
Определить разные стили контрола в зависимости от степени его вложения в другие контролы
    #39401676
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
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.
    public class MarginConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var uiElement = value as FrameworkElement;
            var multiply = string.IsNullOrEmpty((string)parameter) ? 1 : System.Convert.ToInt32(parameter);
            if (uiElement == null) throw new NotSupportedException();
            var depth = GetDepth(uiElement);
            return new Thickness(depth * multiply);
        }

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

        private static int GetDepth(DependencyObject uiElement)
        {
            var element = uiElement;
            int index = 0;
            while ((element = VisualTreeHelper.GetParent(element)) != null)
            {
                index++;
            }
            return index;
        }
    }



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    <Window.Resources>
        <local:MarginConverter x:Key="MarginConverter"/>
        <Style TargetType="{x:Type Grid}">
            <Setter Property="Margin" Value="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource MarginConverter}, ConverterParameter=10}"/>
        </Style>
    </Window.Resources>
    <Grid Background="Green">
        <Grid Background="Red">
            <Grid Background="Blue">
                <Grid Background="Orange">
                    <Grid Background="Yellow">
                        <Grid Background="Silver">

                        </Grid>
                    </Grid>
                </Grid>
            </Grid>
        </Grid>
    </Grid>
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Определить разные стили контрола в зависимости от степени его вложения в другие контролы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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