Pergunta

Eu tenho uma imagem 64x64 que estou usando como fonte de um VisaulBrush, que coloco lado a lado no plano de fundo de um controle.No entanto, com base em alguma lógica de tempo de execução, quero alterar a origem do pincel visual.Não o tamanho do bloco, apenas onde está o 'canto superior esquerdo', se preferir.Em outras palavras, pense nisso não como um deslocamento no ladrilho em si, mas sim como um deslocamento de onde o ladrilho começa no controle.

No entanto, além de fingir usando a imagem original para renderizar manualmente em uma segunda imagem do mesmo tamanho usando um padrão 2x2 que começa em um deslocamento negativo específico (cortando assim esse 2x2 para o tamanho do bloco), então usando essa imagem como fonte do pincel de azulejo real, não sei de que outra forma posso conseguir isso.Estou surpreso por não ter visto nenhum tipo de TileOffset ou algo semelhante.Posso acabar rolando minha própria subclasse do pincel que faz exatamente isso.

A menos que alguém conheça uma maneira mais fácil de fazer isso ...:)

Foi útil?

Solução

bem como afirma aqui Propriedade da janela de visualização TileBrushs:

Obtém ou define a posição e as dimensões do bloco base de um TileBrush

você pode ajustar facilmente os dois primeiros parâmetros do ViewPort para compensar o bloco.por exemplo:

<ImageBrush ImageSource="..."
  Viewport="0,0,20,20" ViewportUnits="Absolute"
  TileMode="Tile" />

se essa era sua base e você deseja compensar esses 5px na direção x, faça:

<ImageBrush ImageSource="..."
  Viewport="5,0,20,20" ViewportUnits="Absolute"
  TileMode="Tile" />

Como TileBrush é uma base para ImageBrush assim como para VisualBrush isso se aplica igualmente a VisualBrush.

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