Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

nero_lux

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

Mensagens Recomendadas

nero_lux    0
nero_lux

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>


Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Nazgulled    8
Nazgulled

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Caio Proiete    0
Caio Proiete

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nero_lux    0
nero_lux

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>

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ziwdon    0
Ziwdon

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nero_lux    0
nero_lux

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nero_lux    0
nero_lux

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?)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nero_lux    0
nero_lux

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();
	}

}
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ziwdon    0
Ziwdon

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nero_lux    0
nero_lux

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Ziwdon    0
Ziwdon

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
nero_lux    0
nero_lux

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!

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade