Здравствуйте, rminko, Вы писали:
R>Парни,
R>Недавно создавал тему про ЛистВью и датаГрид. проблемы затронутые в той теме благополучно решил. но теперь новая проблемка
R>и что -то пока не пойму как ее победить
R>Есть DataGrid из двух колонок. К нему прибиндена коллекция (ObservableCollection<myType>)
R>myType имеет такие свойства
R>int a
R>int b
R>Brush brush
R>int Width
R>a и b прибиндины к колонкам. (в XAML)
R>brush — к свойству Background стиля. (в XAML)
R>необходимо что бы на фоне ячейки "a" рисовался прямоугольник шириной Width (из соотвествующего ячейки экземлпяра myType)
R>Пока в голову лезет только в XAML в стиле или шаблоне рисовать rectangle c привязкой к Width но как это сделать на практике никак не догоню.
R>Подскажите в какую сторону копать, а если кто кинет в меня примерчиком как это сделать в XAML или в коде я буду безгранично счастлив.
Посмотрите в сторону
DataGridTemplateColumn, там же есть и пример реализации.
Здравствуйте, joher, Вы писали:
J>Посмотрите в сторону DataGridTemplateColumn, там же есть и пример реализации.
Спасибо. буду копать
Здравствуйте, joher, Вы писали:
J>Посмотрите в сторону DataGridTemplateColumn, там же есть и пример реализации.
Посмотрел в эту сторону
получился такой шаблончик
<DataTemplate x:Key="aTemplate">
<Border Width="{Binding Path=width}" Background="LightBlue" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left">
<TextBlock Text="{Binding Path=a}"/>
</Border>
</DataTemplate>
"width" и "а" — как я уже говорил — это свойства элемента коллекции прибинденной к гриду
Все устраивает кроме одного НО. Так как TextBlock является дочерним элементом для бордера, то он рисуется внутри этого бордера и если ширина бордера маленькая а текст в поле "а" длинный то он есстественно обрезается.
а мне надо бы что бы текст был дочерним для самой ячейки но под ним мог рисоваться бордер или rectangle закрашенный.
Подмогните малек. как бы такую конструкцию сообразить
Здравствуйте, rminko, Вы писали:
R>Посмотрел в эту сторону
R>получился такой шаблончик
R>R> <DataTemplate x:Key="aTemplate">
R> <Border Width="{Binding Path=width}" Background="LightBlue" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left">
R> <TextBlock Text="{Binding Path=a}"/>
R> </Border>
R> </DataTemplate>
R>
R>"width" и "а" — как я уже говорил — это свойства элемента коллекции прибинденной к гриду
R>Все устраивает кроме одного НО. Так как TextBlock является дочерним элементом для бордера, то он рисуется внутри этого бордера и если ширина бордера маленькая а текст в поле "а" длинный то он есстественно обрезается.
R>а мне надо бы что бы текст был дочерним для самой ячейки но под ним мог рисоваться бордер или rectangle закрашенный.
R>Подмогните малек. как бы такую конструкцию сообразить
<DataTemplate x:Key="aTemplate">
<Grid>
<Border Width="{Binding Path=width}" Background="LightBlue" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left">
</Border>
<TextBlock Text="{Binding Path=a}"/>
</Grid>
</DataTemplate>
Здравствуйте, vit_as, Вы писали:
_>_> <DataTemplate x:Key="aTemplate">
_> <Grid>
_> <Border Width="{Binding Path=width}" Background="LightBlue" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left">
_> </Border>
_> <TextBlock Text="{Binding Path=a}"/>
_> </Grid>
_> </DataTemplate>
_>
перед тем как написать пробовал так только без блока <Grid>. Все отлично работает спасибо. Есть только один ньюянс в реале я использую в объекте <border> свойство BorderThickness="0" и если поле width = 0 то как и ожидается никакого треугольника я не увижу. Конкретно в этой задаче меня вполне устраивает такое решение, но что если бы мне было необходимо рисовать c BorderThickness="1" то даже при width=0 я все равно увижу вертикальную палочку (рамку вокруг пряиоугольника нулевой ширины), как в таком случае реализовать? сделать два разных шаблона и щелкать их по тригеру? есть еще какие-нить варианты?
Здравствуйте, rminko, Вы писали:
R>Здравствуйте, vit_as, Вы писали:
_>>_>> <DataTemplate x:Key="aTemplate">
_>> <Grid>
_>> <Border Width="{Binding Path=width}" Background="LightBlue" BorderBrush="Black" BorderThickness="1" HorizontalAlignment="Left">
_>> </Border>
_>> <TextBlock Text="{Binding Path=a}"/>
_>> </Grid>
_>> </DataTemplate>
_>>
R>перед тем как написать пробовал так только без блока <Grid>. Все отлично работает спасибо. Есть только один ньюянс в реале я использую в объекте <border> свойство BorderThickness="0" и если поле width = 0 то как и ожидается никакого треугольника я не увижу. Конкретно в этой задаче меня вполне устраивает такое решение, но что если бы мне было необходимо рисовать c BorderThickness="1" то даже при width=0 я все равно увижу вертикальную палочку (рамку вокруг пряиоугольника нулевой ширины), как в таком случае реализовать? сделать два разных шаблона и щелкать их по тригеру? есть еще какие-нить варианты?
Для установки значения бордера можно пойти двумя путями, первое это, как Вы уже написали, триггер, а второе — конвертер для Binding. В обоих случаях изменения можно написать по крайней мере для 2х свойств: Visibility, BorderThickness.