• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

nero_lux

Dúvidas na criação de um Botão como UserControl

15 mensagens neste tópico

Boa Noite, estou com um problema não consigo criar um botão com uma imagem associada (como UserControl), ou seja quando associo o meu Control ao meu Window fica sem imagem.

O que estou a fazer de errado?


<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:local="clr-namespace:WpfControlLibrary1"
x:Class="WpfControlLibrary1.BtnOkUsrCrl"
x:Name="UserControl"
Width="65" Height="55">
<Grid x:Name="LayoutRoot" RenderTransformOrigin="0.5,0.5">
	<Grid.ColumnDefinitions>
		<ColumnDefinition Width="Auto" MinWidth="4.4"/>
		<ColumnDefinition Width="Auto" MinWidth="95.6"/>
	</Grid.ColumnDefinitions>
	<Grid.RenderTransform>
		<TransformGroup>
			<ScaleTransform/>
			<SkewTransform/>
			<RotateTransform Angle="-0.326"/>
			<TranslateTransform/>
		</TransformGroup>
	</Grid.RenderTransform>
	<Button x:Name="BtnUsrCrl" Width="50" Height="45" Background="{x:Null}"  BorderThickness="0" Margin="7,3,-7,7">
		<StackPanel x:Name="SckPnlUsrCrl">
			<Image x:Name="ImgBtnUsrCrl" Source="ImgControl/ok.png"></Image>
		</StackPanel>
	</Button>
</Grid>
<!--  A button style that displays an attached image -->
</UserControl>


0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto pouco tem a ver com C#, isto é XAML (pelo que me parece) e talvez tenhas mais sorte se referires isso no título do tópico. Eu cheguei aqui induzido em erro porque de XAML pouco percebo mas nunca pensei que a dúvida fosse essa.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O XAML é só para as pessoas saber de que forma é que criei o meu botão com imagem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Em uma vista rápida, não me parece haver nada errado com o código XAML do seu UserControl que faria com que a imagem não aparecesse.

Verifique se o item "Build Action" nas propriedades da sua imagem lá no UserControl, está marcado como "Resource", para que a imagem seja incorporada nos resources da sua biblioteca, e verifique também se não existe nenhum outro controlo a sobrepor o seu botão lá no Window... Se estiver em um grid-

Se possível, mostre-nos também como ficou o código XAML para declarar o controlo lá no Window.

Cumprimentos,

Caio Proiete

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bom Dia, seu eu colocar o item "Build Action" como "Resource" dá-me logo um erro ao compilar o User Control ('WpfControlLibrary1.BtnOkUsrCrl' does not contain a definition for 'InitializeComponent' and no extension method 'InitializeComponent' accepting a first argument of type 'WpfControlLibrary1.BtnOkUsrCrl' could be found (are you missing a using directive or an assembly reference?).

Em relação a declaração do UserControl no Window, eis o código:

<Window

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

    xmlns:MyControls="clr-namespace:WpfControlLibrary1;assembly=WpfControlLibrary1"

xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

x:Class="GestCalWPF.WindowLogin"

x:Name="Window"

Title="Autenticação - GESTCAL.NET"

Width="475" Height="293" mc:Ignorable="d" BorderThickness="0" Visibility="Visible" ResizeMode="NoResize"  Closing="Window_Closing" Loaded="Window_Loaded">

<Window.Background>

<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">

<GradientStop Color="Black"/>

<GradientStop Color="#FFF8F6F6" Offset="1"/>

</LinearGradientBrush>

</Window.Background>

<Grid x:Name="LayoutRoot">

<Grid.RowDefinitions>

<RowDefinition Height="0.163*"/>

<RowDefinition Height="0.837*"/>

</Grid.RowDefinitions>

<Grid.Background>

<LinearGradientBrush EndPoint="312,442" StartPoint="312,0" MappingMode="Absolute" SpreadMethod="Repeat">

<GradientStop Color="Black" Offset="0.017"/>

<GradientStop Color="White" Offset="1"/>

<GradientStop Color="#FFF8F0F0" Offset="1"/>

<GradientStop Color="#FF2C2B2B" Offset="0.457"/>

<GradientStop Color="#FF373737" Offset="0.728"/>

<GradientStop Color="#FF393838" Offset="0.961"/>

</LinearGradientBrush>

</Grid.Background>

        <MyControls:ContainerLogin Margin="0,-20,23,107" HorizontalAlignment="Right" Width="240" Grid.Row="1"/>

<MyControls:LblUsrCnrControl x:Name="LblUsr" Margin="228.007,8,0,0" VerticalAlignment="Top" HorizontalAlignment="Left" Width="50.993" Grid.Row="1" />

        <MyControls:TxtUsrCnrControl x:Name="TxtUsr" Margin="0,14.15,42,0" Height="22" VerticalAlignment="Top" HorizontalAlignment="Right" Width="144" Grid.Row="1">

</MyControls:TxtUsrCnrControl>

<MyControls:PwdTxtUsrCrlClasse x:Name="TxtPwd"  Margin="0,60,43,0" HorizontalAlignment="Right" VerticalAlignment="Top" Height="22" Grid.Row="1" Width="144"/>

        <MyControls:LblUsrCnrControl x:Name="LblPwd" Margin="227.007,54,191,0" Height="28" RenderTransformOrigin="1.745,0.214" VerticalAlignment="Top" d:LayoutOverrides="Height" Grid.Row="1"/>

        <MyControls:BtnOkUsrCrl x:Name="BtnOk" HorizontalAlignment="Right" Margin="0,0,122,38" VerticalAlignment="Bottom" Grid.Row="1" d:LayoutOverrides="Width, Height"/>

</Grid>

</Window>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A Window está na mesma pasta que o UserControl que queres adicionar? Estás a fazer isso tudo num único projecto?

p.s. Tens de meter as tags "code" no código e não nos teus comentários ;) .

Edit:

Experimenta em vez de:

<Image x:Name="ImgBtnUsrCrl" Source="ImgControl/ok.png"></Image>

Fazer:

<Image x:Name="ImgBtnUsrCrl" Source="pack://application:,,,/Resources/ImgControl/ok.png" />

Neste caso a tua imagem tem de estar na pasta ImgControl, que por sua vez deve estar na pasta Resources. Para além disso, selecciona a tua imagem e define a Build Action como Resource.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nesse caso, que ainda estou em fase de testes, tenho dois projectos diferentes um para o UserControl e outro para WPFApplication.

Desculpa a minha ignorância mas não percebi a tua Resposta.

Tenho que adicionar uma Tag referente a imagem???

Mas no meu control a imagem está associado a um botão


<Button x:Name="BtnUsrCrl" Width="50" Height="45" Background="{x:Null}"  BorderThickness="0" Margin="7,3,-7,7">
                        <StackPanel x:Name="SckPnlUsrCrl">
                                <Image x:Name="ImgBtnUsrCrl" Source="ImgControl/ok.png"></Image>
                        </StackPanel>
                </Button>

e a imagem está dentro de uma pasta desingada ImgControl.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando falei nas tags estava-me a referir ao teu post anterior. Esquece isso.

Tenta fazer o que disse no meu post após "Edit".

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Segui o teu conselho mas ao colocar a propriedade do "Build Action" a Resource ocorre um erro:

BtnOkUsrCrl' does not contain a definition for 'InitializeComponent' and no extension method 'InitializeComponent' accepting a first argument of type 'WpfControlLibrary1.BtnOkUsrCrl' could be found (are you missing a using directive or an assembly reference?)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na classe do teu controlo, não tens uma chamada à função "InitializeComponent();"?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tenho, eis o código da Minha Classe


using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfControlLibrary1
{
/// <summary>
/// Interaction logic for BtnOkUsrCrl.xaml
/// </summary>
public partial class BtnOkUsrCrl : UserControl
{
	public BtnOkUsrCrl()
	{
		this.InitializeComponent();
	}

}
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta sem o "this.".

Já agora...tens de colocar a propriedade "Build Action" da imagem e não do controlo. Do lado direito no ecrã deves ver uma pasta chamada "Resources" e lá dentro deve estar a tua imagem. Selecciona-a e depois altera a dita propriedade. Se por acaso alteraste a propriedade do controlo, volta a repor o que estava.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado, era mesmo isso o problema da Imagem.

Só tenho mais uma dúvida o meu botão com imagem no Window não tem o método Click, o que devo de fazer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Selecciona a imagem na Design Window, ou põe o cursor do rato em cima de "<Image..." no código XAML. Depois basta ires às propriedades do lado direito e deves ver lá um icon com um relâmpago. Clica e aparecem-te todos os eventos possíveis para a imagem. Procura o evento "Click" e clica duas vezes para gerar o código do evento automaticamente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esta era básica, pensava que ao criar um UserControl de um Botão ele automaticamente herdasse os métodos do pai.

Porque se eu for ao meu projecto onde estou a usar o meu UserControl não tenho a propriedade do click, apesar de ter adicionado o método no UserControl.

Obrigado pela ajuda!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora