Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
hamin
594 / 390 / 236
Регистрация: 21.11.2012
Сообщений: 1,177
1

AttachedProperty для колонки датагрида

11.07.2019, 11:26. Просмотров 956. Ответов 6
Метки нет (Все метки)

создал свойство для устанавки контента ячейки, не пойму почему не работает..
само свойство:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class AttachedProperties
    {
        public static HorizontalAlignment GetHorizontalContentAlignment(DependencyObject obj)
        {
            return (HorizontalAlignment)obj.GetValue(HorizontalContentAlignmentProperty);
        }
 
        public static void SetHorizontalContentAlignment(DependencyObject obj, HorizontalAlignment value)
        {
            obj.SetValue(HorizontalContentAlignmentProperty, value);
        }
 
        // Using a DependencyProperty as the backing store for HorizontalContentAlignment.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty HorizontalContentAlignmentProperty =
            DependencyProperty.RegisterAttached("HorizontalContentAlignment", typeof(HorizontalAlignment), typeof(AttachedProperties));
    }
биндинг в стиле
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<Style TargetType="{x:Type DataGridCell}">
       <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                            <ContentPresenter x:Name="contPR"
                                VerticalAlignment="Center" 
                                Margin="2 1" 
                                HorizontalAlignment="{Binding Path=(ap:AttachedProperties.HorizontalContentAlignment), RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGridTextColumn}}"
                                SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
установка свойства:
XML
1
<DataGridTextColumn Header="Startdatum"  ap:AttachedProperties.HorizontalContentAlignment="Right" Binding="{Binding StartDatum, StringFormat=dd.MM.yyyy}"></DataGridTextColumn>
не работает
пока решил временно конвертером, в коде доступ без проблем осуществляется след. образом: в конвертер передаю саму ячейку и извлекаю значение свойства, которое и возвращаю из конвертера
C#
1
2
3
4
5
6
7
8
9
10
11
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var dgCell  = value as DataGridCell;
 
            if (dgCell == null) return HorizontalAlignment.Left;
            else
            {
                var result = dgCell.Column.GetValue(AttachedProperties.HorizontalContentAlignmentProperty);
                return result == null ? HorizontalAlignment.Left : result;
            }
        }
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2019, 11:26
Ответы с готовыми решениями:

Проблема копирования из датагрида в датагрид
проблема следующая: когда в экселе копируешь некую область ячеек и вставляешь ее, допустим, рядом,...

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

Как программно вызвать CellContentClick датагрида для нужной ячейки
В общем как в цикле правильно вызвать CellContentClick? Например, если цикл for(int i = 0; i &lt;...

Сумма датагрида
Привет ребята нужна помощь! У меня есть дата грид а там заложены данные и есть 2 техт бокса как...

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

6
Kazbek17
https://vk.com/a.tsarev83
341 / 217 / 100
Регистрация: 06.02.2012
Сообщений: 768
11.07.2019, 12:24 2
hamin, Попробуйте так.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public class AttachedProperties : DependencyObject
    {
 
        public HorizontalAlignment HorizontalContentAlignment
        {
            get { return (HorizontalAlignment)GetValue(HorizontalContentAlignmentProperty); }
            set { SetValue(HorizontalContentAlignmentProperty, value); }
        }
 
        public static readonly DependencyProperty HorizontalContentAlignmentProperty =
            DependencyProperty.Register("HorizontalContentAlignment", typeof(HorizontalAlignment), typeof(AttachedProperties), new PropertyMetadata(HorizontalAlignment.Left));
 
    }
XML
1
HorizontalAlignment="{Binding Path=(local:AttachedProperties.HorizontalContentAlignment), RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:MainWindow}}"
0
hamin
594 / 390 / 236
Регистрация: 21.11.2012
Сообщений: 1,177
11.07.2019, 13:37  [ТС] 3
Kazbek17,

а что это мне даст? в данном случае вы такой привязкой говорите "привязываюсь к HorizontalContentAlignment главного окна", но я то хочу привязаться к свойству колонки, в которой находится текущая ячейка
0
Элд Хасп
Модератор
3581 / 2586 / 841
Регистрация: 21.04.2018
Сообщений: 8,234
Записей в блоге: 2
11.07.2019, 14:35 4
Лучший ответ Сообщение было отмечено hamin как решение

Решение

Цитата Сообщение от hamin Посмотреть сообщение
создал свойство для устанавки контента ячейки, не пойму почему не работает..
Возможно, DataGridCell не входит в визуальное дерево DataGridTextColumn.
Поэтому, AncestorType=DataGridTextColumn не находит объекта привязки.
Проверьте Динамическое значение привязки - скорее всего будет null.
1
Kazbek17
https://vk.com/a.tsarev83
341 / 217 / 100
Регистрация: 06.02.2012
Сообщений: 768
11.07.2019, 15:05 5
я думаю что проще сделать это. Чем парится.
XML
1
2
3
4
5
                    <DataGridTextColumn.CellStyle>
                        <Style>
                            <Setter Property="TextBlock.TextAlignment"  Value="Right"/>
                        </Style>
                    </DataGridTextColumn.CellStyle>
1
hamin
594 / 390 / 236
Регистрация: 21.11.2012
Сообщений: 1,177
11.07.2019, 15:38  [ТС] 6
Элд Хасп,

вы правы, я думал об этом, но проверить не удосужился! значит оставлю конвертер, с ним работает как надо
0
Миниатюры
AttachedProperty для колонки датагрида  
hamin
594 / 390 / 236
Регистрация: 21.11.2012
Сообщений: 1,177
11.07.2019, 15:43  [ТС] 7
Kazbek17,

кому как, по мне лучше 1 раз заморочиться и потом всегда использовать быстро, чем подбивать стиль под конкретную ситуацию. кроме того со стилем более громоздко получается
0
11.07.2019, 15:43
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2019, 15:43

Заполнить лист из датагрида
Пытаюсь заполнить List из DataGridView (в нем лежит список яблок). Класс яблок: public...

Соотнести размер Датагрида и Формы
Надо добиться следующего: если в Датагриде много колонок и колонки широкие, то Датагрид должен быть...

Выравнивание только заголовка в колонке датагрида
Собственно сабж. Как выранивать только заголовок, не трогая выравнивание всей колонки?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.