| 

.NET C# Java Javascript Exception

1
Hallo zusammen.

Ich kriege noch mehr graue Haare als ich schon habe :-)
Folgendes Problem:

Ich habe in Blend4 ein Template für einen Button UserControl erstellt.
Aus dem Template (LayoutRoot, 4x rectangle, 1 x image, 1 x contentPresenter) habe ich einen Button generiert.

<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"
x:Class="WpfControlLibrary15.MainControl"
x:Name="TemplateButton"
d:DesignWidth="640" d:DesignHeight="480" Width="130" Height="30"
DataContext="{Binding RelativeSource={RelativeSource Self}}">

<UserControl.Resources>
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid x:Name="LayoutRoot" Background="{x:Null}" Width="130" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Rectangle x:Name="rectangle1" Stroke="Black" RadiusY="10" RadiusX="10" Margin="0" StrokeThickness="0" Opacity="0.38" Width="130">
<Rectangle.Fill>
<RadialGradientBrush>
<GradientStop Color="Black"/>
<GradientStop Color="#C1FFFFFF" Offset="0.947"/>
</RadialGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Rectangle x:Name="rectangle2" Stroke="Black" RadiusX="10" RadiusY="10" Margin="2" StrokeThickness="0" Fill="Black" Width="126"/>
<Rectangle x:Name="rectangle" Stroke="Black" RadiusX="10" RadiusY="10" Margin="2" StrokeThickness="0">
<Rectangle.Fill>
<RadialGradientBrush Center="0.501,1.052" GradientOrigin="0.501,1.052">
<GradientStop Color="#FFF7F781"/>
<GradientStop Offset="0.94"/>
</RadialGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Rectangle Stroke="Black" RadiusX="10" RadiusY="10" Margin="2" StrokeThickness="0">
<Rectangle.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFFBF9F9"/>
<GradientStop Offset="1"/>
<GradientStop Color="#07484848" Offset="0.286"/>
<GradientStop Color="#15C5C5C5" Offset="0.496"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>

<Image x:Name="image" Margin="8,0,30,0"
HorizontalAlignment="Left" Width="20"
Height="20" Opacity="0.645"
Source="{Binding ImageSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</Image>

<ContentPresenter x:Name="contentPresenter"
HorizontalAlignment="Stretch"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Margin="34.688,0,8,0"
Content="{Binding ButtonText, UpdateSourceTrigger=PropertyChanged, ElementName=TextBlock}">
</ContentPresenter>

</Grid>

<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True"/>
<Trigger Property="IsDefaulted" Value="True"/>

<Trigger Property="IsMouseOver" Value="False">
<Setter Property="FontSize" Value="12"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontWeight" Value="Normal"/>
</Trigger>

<Trigger Property="IsMouseOver" Value="True">
<Setter Property="FontSize" Value="14"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Effect" TargetName="contentPresenter">
<Setter.Value>
<DropShadowEffect/>
</Setter.Value>
</Setter>
<Setter Property="Fill" TargetName="rectangle">
<Setter.Value>
<RadialGradientBrush Center="0.501,1.052" GradientOrigin="0.501,1.052">
<GradientStop Color="#FFFFED00"/>
<GradientStop Offset="0.94"/>
</RadialGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Background" TargetName="LayoutRoot" Value="{x:Null}"/>
<Setter Property="Fill" TargetName="rectangle1">
<Setter.Value>
<RadialGradientBrush>
<GradientStop Color="Black"/>
<GradientStop Color="Yellow" Offset="0.948"/>
</RadialGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Opacity" TargetName="image" Value="1"/>

</Trigger>

<Trigger Property="IsPressed" Value="True"/>
<Trigger Property="IsEnabled" Value="False"/>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>

<Button x:Name="button" Style="{DynamicResource ButtonStyle1}" Cursor="Hand"/>
</UserControl>


Im Usercontrol.cs habe ich ein DependencyProperty erstellt:
public BitmapSource ImageSource 
{
get {
return (BitmapSource)GetValue(ImageSourceProperty);
}
set
{
SetValue(ImageSourceProperty, value);
MessageBox.Show("Neues Value");
}
}

public static readonly DependencyProperty ImageSourceProperty =
DependencyProperty.Register(
"ImageSource",
typeof(BitmapSource),
typeof(MainControl),
new FrameworkPropertyMetadata(OnImageChanged));

private static void OnImageChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
{
dependencyObject.SetValue(Image.SourceProperty, e.NewValue);
// Test if works
MessageBox.Show( e.NewValue.GetType().ToString());
MessageBox.Show( e.NewValue.ToString());
MessageBox.Show( dependencyObject.GetType().ToString());
}


So nun will ich das Image des Buttons (das wiederrum in einen UserControl liegt) in meinen Net-Testprojekt dynamisch ersetzen, aber ich krieg das nicht gebacken!

var uriSource = new Uri(@"./Images/Datatransfer_48.png", UriKind.Relative); 

// New Image in the UserControl
// Das geht nicht und ich weiß nicht warum
var bim = new BitmapImage(uriSource);
verbindungsDaten1.mainControl1.ImageSource = bim;


Wäre echt toll, wenn jemand helfen könnte.
Viele Grüße

Reinhard
23.03.2011
reinhard36 11 1 3
hi reinhard, ich wäre froh, wenn mir nur die haare grau würden: ich bin kein wpf spezialist, und wollte mir den code ansehen (übrigens hübscher button), aber ich krieg es nicht kompilierbar: bei MainControl regt er sich auf ....
nabuchodonossor 23.03.2011
2 Antworten
0
Also, ich habs zum Laufen gebracht, und es funktioniert. Allerdings ist das Bild winzig klein. Hilft dir das?

Ich hab natürlich weiter rumgespielt, und jetzt das Bild etwas größer gemacht (aber natürlich auch den button), habe dazu bei mir nur eine Kleinigkeit geändert:

<Image x:Name="image" Margin="8,0,30,0" 
HorizontalAlignment="Left" Width="90"
Height="180"
Opacity="0.645"
Source="{Binding ImageSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
</Image>
23.03.2011
nabuchodonossor 1,3k 5
0
Hi nabuchodonossor (netter Name),

vielen Dank für Deine Antwort, aber hilft mir leider nix, weil mein Testprojekt viel komplexer ist. Wenn du willt können wir das gemeinsam per Fernwartung lösen.
Wenn wir eine Lösung gefunden haben, können wir diese ja gern posten.
Tel.Nr. findest Du auf meiner Homepage WaWi1.de

Gruß

Reinhard
23.03.2011
reinhard36 11 1 3
das wird wohl eher nicht gehen (zeitproblem, muss noch nebenbei was machen *g*).

Was ich aber gesehen habe - und dir nochmal bestätige - dein xaml/cs code stück funktioniert! Die Bilder sind halt wirklich sehr klein, also gibt es ohnehin nur zwei Möglichkeiten: kleine Bilder sind ok oder aber der Button muss größer werden.
nabuchodonossor 23.03.2011
Aber ich denke, wir kommen doch irgendwann ins Geschäft. Die auf deiner Seite angebotene Hardware wird irgendwann für mich ein Thema werden.
nabuchodonossor 23.03.2011

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH