arquivos Mensais: Abril 2013

Rápido e fácil: Mover um retângulo usando c# em uma App Store do Windows

Minha filosofia geral do blog é que é perfeitamente possível blog velho, estabeleceu-se assuntos que foram cobertos até a morte em outro lugar.  Presumo que este tópico é um daqueles, Mas eu estou blogando-Enfim.

Tenho trabalhado em uma janela loja app e estou na parte onde eu preciso fazer alguma animação.  Para este fim., Estive pensando pedaços e pedaços do windows armazenam animação app que, como acontece, é bastante próximo ao, Mas não exatamente como, Animações XAML baseado em .NET (Ainda vou a lidar com o fato de que WinRT <> .NET 🙂 ).

Esta manhã eu queria obter uma alça sobre arrastar e soltar as operações.  No caminho para que, Eu tenho esbarrado movendo-se um retângulo em vez disso :).  Aqui está o código que move um retângulo quando o usuário clica em um botão:

   1:   
   2:              MatrixTransform ct = (MatrixTransform)rectBig.RenderTransform;
   3:              Matriz m = ct.Matriz;
   4:              m.OffsetX   = 10;
   5:              m.OffsetY   = 10;
   6:              ATLMatriz = m;
   7:              rectBig.RenderTransform = ct;

O truque aqui é que não posso mudar diretamente OffsetX ou OffsetY.  Pode haver uma maneira mais inteligente de fazer isso (e se você conhece e me sinto como, por favor, poste nos comentários). 

Para fazer isso, Eu preciso:

1. Obter o MatrixTransform do retângulo (lançando RenderTransform).

2. Obter a matriz desse cara.

3. Alterar deslocamentos do Matrix.

4. Reatribuir a matriz para o MatrixTransform.

5. Reatribuir o MatrixTransform volta ao retângulo.

Para testá-lo, Eu coloquei um retângulo e botão na tela. Quando clico no botão, a lógica acima executa e move o retângulo imediatamente.

Em algum momento, Eu gostaria de animar isto, mas não faço ideia de como conseguir um DoubleAnimation para trabalhá-lo (Storyboard.SetTargetProperty() está sendo um mistério para mim sobre este para o tempo).

</fim>

undefinedSubscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin

Definindo a altura da ListboxItems em uma caixa de listagem programaticamente para App Store do Windows

Estou trabalhando em um aplicativo de armazenamento do windows e uma das coisas que quero fazer no app é exibir um log que mostra mensagens de status e outros petiscos informativos como o utilizador trabalha as coisas. Para este fim., Eu adicionei um ListBox como segue:

<ListBox x:Nome ="GameStateLog" HorizontalAlignment ="Centro" Altura ="221" VerticalAlignment ="Início" Largura ="499" Preenchimento ="0" FontSize ="10">

 

O código c# para preencher o listbox em tempo de execução foi ao longo das linhas de:

GameStateLog.Items.Insert(0, GameStateCounter     + ": Novo estado do jogo: esperando por jogador 1 nome");

Isso funcionou bem o suficiente, mas a interface do usuário mostrou uma quantidade louca de preenchimento ao redor as mensagens individuais como eles foram adicionados. Isso faz sentido, se deseja que os usuários finais para ser capaz de selecionar esses itens, mas não faz sentido quando eu só quero mostrar uma série de duração das mensagens de log-os usuários não selecionar estas, apenas visualizá-los. Era estranhamente difícil de encontrar uma maneira fácil de fazer isso e, possivelmente,, a maneira que eu encontrei não é necessariamente "fácil", mas eu consegui trabalhar Okey. O insight chave veio nesta postagem here (http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/c4a6f694-bd46-4779-ab83-b1c2fcb2397c) de Bob Relyea. Em vez de adicionar seqüências de caracteres para a coleção de itens no ListBox, Adicionar ListBoxItems. Adicionando uma cadeia de caracteres, o ListBox foi criando sua própria ListBoxItem por conta própria. Eu não era capaz de afetar qualquer coisa sobre esse ListBoxItem após o fato. O novo código é:

        privada privatevoid AddGameStateLogMessage(Cadeia de caracteres Amensagem)
        {
            ListBoxItem li = Novo ListBoxItem();
            Li.Conteúdo = mensagem;
            Li.MaxHeight = 25;

            Espessura thisPadding = Novo Espessura(5, 0, 5, 0);
            Li.Preenchimento = thisPadding;

            GameStateLog.Items.Insert(0,Li);
        }

 

Aqui estou criando do ListBoxItem e inseri-los. Eu removi o preenchimento em excesso, definindo sua espessura.

Isso é muito flexível que eu pretendo fazer alguma cor de codificação para destacar determinados tipos de mensagens e adicionando diretamente ListBoxItems eu chegar ao estilo-los como quiser.

Espero que isso ajude alguém!

</fim>

undefinedSubscreva ao meu blog.

Siga-me no Twitter em http://www.twitter.com/pagalvin