Como definir o plano de fundo de uma célula de datagrid durante o evento AutoGeneratingColumn, dependendo do seu valor?
Eu ainda estou lutando com a manipulação de fundos de células, então estou fazendo uma nova pergunta.
Um usuário "H.B." escreveu que eu posso realmente definir o estilo da célula durante oAutoGeneratingColumn evento -Alterar a cor da célula DataGrid com base nos valores. O problema é que não tenho certeza de como fazer isso.
O que eu quero: Definir diferentecores de fundo para cada célula, dependendo do seu valor. Se o valor fornull
Eu também queronão ser estarclicável (focalizável eu acho).
O que eu tenho / estou tentando fazer:
private void mydatagrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
foreach (Cell cell in e.Column)
{
if (cell.Value < 1)
{
cell.Background = Color.Black;
cell.isFocusable = false;
}
else
{
cell.Background = Color.Pink;
}
}
}
Este é apenas o pseudocódigo. É algo como isso é possível durante a geração automática de colunas e, em caso afirmativo, como posso editar meu código para que ele seja válido?
Eu li sobre conversores de valor, mas eu quero saber se é de alguma forma possível programaticamente, sem escrever XAML.
Por favor, entenda que eu ainda sou um iniciante em C # / WPF / DataGrid.
Parte1 da solução:Eu usei a resposta que aceitei. Basta colocá-lo em
<Window.Resources>
<local:ValueColorConverter x:Key="colorConverter"/>
<Style x:Key="DataGridCellStyle1" TargetType="{x:Type DataGridCell}">
<Setter Property="Padding" Value="5"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True">
<Border.Background>
<MultiBinding Converter="{StaticResource colorConverter}">
<Binding RelativeSource="{RelativeSource AncestorType=DataGridCell}" Path="Content.Text"/>
<Binding RelativeSource="{RelativeSource AncestorType=DataGridCell}" Path="IsSelected"/>
</MultiBinding>
</Border.Background>
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
E feito para isso umMultiBinding
conversor para que eu possa também definir a cor de fundo para as células selecionadas.
Agora eu só tenho que resolver o problema de definir o foco das células vazias. Alguma dica?
<Style.Triggers>
<Trigger Property="HasContent" Value="False">
<Setter Property="Focusable" Value="False"/>
</Trigger>
</Style.Triggers>
Isso não funciona. Eu tinha cordas vazias nas celas vazias, mas elas estavam cheias de ´null´s, então deveria funcionar, certo? Ou o que estou fazendo errado: | ?
Parte da solução 2:Portanto, o código acima não funcionará, desde que o valor da célula seja uma ´TextBox´, então decidi encontrar outra maneira de lidar com isso, o que pode ser encontrado na minha resposta aqui:https://stackoverflow.com/a/16673602/2296407
Obrigado por tentar me ajudar :)