[VB.NET] WPF probleem

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Motion2
  • Registratie: Maart 2006
  • Laatst online: 09-07 11:19
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:

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..
Heeft iemand enig idee wat hier mis gaat?

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Heb je je window netjes in je xaml file ergens "ge-include"*? Tevens, kijk eens naar mvvm frameworks als Caliburn.Micro om te zien hoe je netjes een structuur opzet in WPF. Die frameworks hebben ook zogeheten window managers om dit soort dingen voor je te regelen.

(disclaimer: WPF is voor mij weer een tijd geleden)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Motion2
  • Registratie: Maart 2006
  • Laatst online: 09-07 11:19
Grijze Vos schreef op donderdag 24 januari 2013 @ 12:24:
Heb je je window netjes in je xaml file ergens "ge-include"*? Tevens, kijk eens naar mvvm frameworks als Caliburn.Micro om te zien hoe je netjes een structuur opzet in WPF. Die frameworks hebben ook zogeheten window managers om dit soort dingen voor je te regelen.

(disclaimer: WPF is voor mij weer een tijd geleden)
Ja, het is een ander project die ik Include. De Xaml file zelf staat bij build options op "Page", custom Tool: MSBuild:Compile. Dit is dus niet anders dan mijn WPF test applicatie.

Ik zal wel eens kijken naar dat Framework, maar ik denk dat dit los staat van mijn foutmelding..

-------------
EDIT:

Volgens mij heb ik het opgelost. Lijkt een Floating Point "bug" te zijn. Heb dit nu toegevoegd aan mijn Form:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
Private Declare Function FPReset Lib "msvcr71.dll" Alias "_fpreset" () As Integer

Public Sub New()
    FPReset()
    ' This call is required by the designer.
    InitializeComponent()

    ' Add any initialization after the InitializeComponent() call.
End Sub


Nu lijkt alles wel te werken...

[ Voor 23% gewijzigd door Motion2 op 24-01-2013 17:05 ]