Beste medetweakers,
Na jaren van WinForms gebruik zijn we binnen ons bedrijf nu aan het kijken naar WPF. Dit omdat WPF meer flexibiliteit biedt en we ook eens naar deze nieuwere techniek willen kijken.
Nu loop ik tegen een probleem aan dat ik niet altijd de hoogte/breedte van een form kan instellen. Ik heb een Loading form gemaakt met een animated gif ( library daarvoor gevonden op codeplex ).
Mijn XAML code ziet er als volgt uit:
Nu is het probleem dat als ik vanuit een Class library ( add-in voor ander product ) dit form probeer aan te roepen ik de volgende melding krijg:
Het gekke is dat deze melding soms niet verschijnt en als ik dezelfde XAML code naar een WPF applicatie (exe) overzet deze gewoon draait en netjes een form toont met de juiste afmetingen.
Ik roep het Form aan via:
Hierbij komt de exception al direct bij New
Wat ik al heb geprobeert:
Na jaren van WinForms gebruik zijn we binnen ons bedrijf nu aan het kijken naar WPF. Dit omdat WPF meer flexibiliteit biedt en we ook eens naar deze nieuwere techniek willen kijken.
Nu loop ik tegen een probleem aan dat ik niet altijd de hoogte/breedte van een form kan instellen. Ik heb een Loading form gemaakt met een animated gif ( library daarvoor gevonden op codeplex ).
Mijn XAML code ziet er als volgt uit:
Visual Basic .NET: mainwindow.xaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| <Window x:Class="LoadingWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:gif="http://wpfanimatedgif.codeplex.com" mc:Ignorable="d" d:DesignHeight="240" d:DesignWidth="240" WindowStyle="None" ResizeMode="NoResize" SizeToContent="WidthAndHeight" Background="Transparent" AllowsTransparency="True"> <Border CornerRadius="40" BorderBrush="LightGray" BorderThickness="4" Padding="6" Background="White" UseLayoutRounding="False" Height="125" Width="200"> <StackPanel > <Image gif:ImageBehavior.RepeatBehavior="Forever" gif:ImageBehavior.AnimatedSource="loadingAnimation.gif" Stretch="Uniform" MaxHeight="80" MaxWidth="80" OpacityMask="White" UseLayoutRounding="False" /> <Label HorizontalAlignment="Center">Loading, please wait...</Label> </StackPanel> </Border> </Window> |
Nu is het probleem dat als ik vanuit een Class library ( add-in voor ander product ) dit form probeer aan te roepen ik de volgende melding krijg:
code:
1
| Set property 'System.Windows.FrameworkElement.Height' threw an exception.' Line number '8' and line position '75 |
Het gekke is dat deze melding soms niet verschijnt en als ik dezelfde XAML code naar een WPF applicatie (exe) overzet deze gewoon draait en netjes een form toont met de juiste afmetingen.
Ik roep het Form aan via:
Visual Basic .NET:
1
2
| Dim TestWindow as New AWLAssemblyCopyGUI.LoadingWindow TestWindow.Show |
Hierbij komt de exception al direct bij New
Wat ik al heb geprobeert:
- Na New de hoogte/breedte instellen, dit geeft weer een andere exception:
code:1 2 3 4 5 6 7 8 9
Overflow or underflow in the arithmetic operation. Stacktrace: at System.Double.Equals(Object obj) at System.Object.Equals(Object objA, Object objB) at System.Windows.DependencyObject.UpdateEffectiveValue(EntryIndex entryIndex, DependencyProperty dp, PropertyMetadata metadata, EffectiveValueEntry oldEntry, EffectiveValueEntry& newEntry, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType) at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal) at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value) at System.Windows.FrameworkElement.set_Width(Double value)
- Bovenstaande exception afvangen en opnieuw de hoogte/breedte instellen. Hierbij wordt geen exception gethrowd en het form heeft netjes de juiste afmetingen. Dit is geen nette oplossing maar werkt wel..