Здравствуйте, 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, там же есть и пример реализации.
Здравствуйте, 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>
Здравствуйте, 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 закрашенный.
Подмогните малек. как бы такую конструкцию сообразить
Здравствуйте, 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.