Jump to content

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


nero_lux

Recommended Posts

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>


Link to comment
Share on other 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

Link to comment
Share on other 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>

Link to comment
Share on other 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.

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Link to comment
Share on other 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.

Link to comment
Share on other 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?)

Link to comment
Share on other 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();
	}

}
}

Link to comment
Share on other 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.

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Link to comment
Share on other 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.

"Rejoice not against me, O mine enemy: when I fall, I shall arise; when I sit in darkness, the LORD shall be a light unto me." - Micah 7:8 (KJV)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.