Pergunta

No processamento de um grupo de itens, eu queria mostrar uma imagem unificada do status do grupo, então eu feito essencialmente uma grade de uma série de ProgressBars com fundos transparentes e vários foregrounds coloridas, tudo ao mesmo celular.

imagem de amostra

Eu estou correndo em alguns artefatos de transparência (bar roxo é realmente roxo sob o verde, e às vezes ele desenha sobre a parte superior, etc) e isso só parece um desperdício bit. Então, eu decidi fazer a minha própria, mas agora eu tenho um pouco de paralisia sobre como fazê-lo. Faço para usar o DrawingContext em OnRender de FrameworkElement, ou há algo mais simples? Existe um conjunto de regras gerais quando se trata de fazer o seu próprio controle?

Eu ponderei a mudança para um gráfico de pizza uma vez que aqueles são fáceis de encontrar, mas sua alta vez que fiz algo não off-the-shelf.

Obrigado!

Foi útil?

Solução

Eu não estou muito certo como você pretende a barra de progresso para combinar diferentes progressos, mas se dizer que o mais distante ao longo progresso é na parte inferior do z-index e menos ao longo de progresso está no topo, então eu faria algo nas linhas deste:

1) eu provavelmente criar um controle de usuário para esta nova progresbar.

2) Teria uma propriedade chamada NumberOfProgresses, que é amarrado com um array contendo o status dos ditos avanços.

3) Cada progresso seria representado por um item de Fronteira (ou talvez algo mais adequado a árvore visual), porque é um simples WPF controle com uma propriedade de fundo. A propriedade background seria definida como agradável um olhar estilo progresso e a cor progresso pode ser ligado ao estilo de dizer propriedade BorderBrush da fronteira. Tornando mais fácil para definir a cor do progresso.

4) O controlo de utilizador teria um UpdateProgress método que converte o valor percentual e o índice do progresso na matriz como parâmetros.

5) Como avanços são atualizados você pode, basta calcular a largura apropriada (controlo da utilização largura real * percentual) para a fronteira e brincar com o índice Z para obtê-lo exibido na parte superior / inferior, ou empilhar as fronteiras horizontaly, defina a menos ao longo de progresso como o primeiro, em seguida, para o resto dos progressos você teria que subtrair progride comprimentos anteriores para obter o mesmo efeito.

Desta forma, não haveria artefatos de transparência induzida e não OnRender () ... Mente-lhe, em WPF não deve haver nenhuma razão para mexer com OnRender isso e OnRender que, como foi requerido em WinForms com OnPaint. Basta configurar os elementos via código para obter a aparência desejada, e deixe WPF fazê-lo da prestação;)

Eu posso imaginar um problema com este controle do usuário embora. Você teria que fornecer feedback para o usuário como para a cor que pertence a qual o progresso. Mas que provavelmente iria levá-lo de volta para um quadrado, o que significa que é melhor / mais simples apenas exibir várias ProgressBars.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top