É possível definir o código por trás de um dicionário de recursos no WPF. Por exemplo, em um controle de usuário de um botão, você o declara em XAML. O código de manipulação de eventos para o clique do botão é feito no arquivo de código atrás do controle. Se eu fosse criar um modelo de dados com um botão, como escrever o código do manipulador de eventos para ele, clique no botão dentro do dicionário de recursos.
147
Respostas:
Acho que o que você está perguntando é que deseja um arquivo code-behind para um ResourceDictionary. Você pode fazer isso totalmente! De fato, você faz da mesma maneira que para uma janela:
Digamos que você tenha um ResourceDictionary chamado MyResourceDictionary. No seu arquivo MyResourceDictionary.xaml, coloque o atributo x: Class no elemento raiz, da seguinte maneira:
Em seguida, crie um código por trás do arquivo chamado MyResourceDictionary.xaml.cs com a seguinte declaração:
E você terminou. Você pode colocar o que quiser no código por trás: métodos, propriedades e manipuladores de eventos.
== Atualização para aplicativos do Windows 10 ==
E caso você esteja jogando com o UWP, há mais uma coisa a ter em atenção:
fonte
x:Class="MyCompany.MyProject.MySubFolder1.MyResourceDictionary"
Caso contrário, se você simplesmente colocar x: Class = "MyResourceDictionary", o analisador xaml não encontrará sua classe.Eu discordo de "ageektrapped" ... usar o método de uma classe parcial não é uma boa prática. Qual seria o propósito de separar o Dicionário da página?
Em um code-behind, você pode acessar o elemento ax: Name usando:
Você pode fazer isso no método OnApplyTemplate se desejar conectar-se aos controles quando o controle personalizado for carregado. O OnApplyTemplate precisa ser substituído para fazer isso. Essa é uma prática comum e permite que seu estilo fique desconectado do controle. (O estilo não deve depender do controle, mas o controle deve depender de um estilo).
fonte
Gishu - embora isso possa parecer uma prática "geralmente não encorajada" Aqui está uma das razões pelas quais você pode querer fazê-lo:
O comportamento padrão das caixas de texto quando elas obtêm o foco é que o cursor seja colocado na mesma posição em que estava quando o controle perdeu o foco. Se você preferir em todo o aplicativo que, quando o usuário guia para qualquer caixa de texto que todo o conteúdo da caixa de texto tenha sido destacado, a adição de um manipulador simples no dicionário de recursos funcionaria.
Qualquer outro motivo pelo qual você queira que o comportamento padrão da interação do usuário seja diferente do comportamento pronto para uso parece ser um bom candidato para um código atrasado em um dicionário de recursos.
Concordo totalmente que qualquer coisa específica da funcionalidade do aplicativo não deve estar em um código atrás de um dicionário de recursos.
fonte
XAML é para a construção de gráficos de objetos que não contêm código.
Um modelo de dados é usado para indicar como um objeto de usuário personalizado deve ser renderizado na tela ... (por exemplo, se for um item da caixa de listagem) o comportamento não faz parte da área de especialização de um modelo de dados. Redesenhar a solução ...
fonte