Das WPF-Fenster löst beim Start eine TypeInitializationException aus

Ich habe ein Excel AddIn mit mehreren Menübändern, wobei ein Menüband das Einstellungsfenster ist. Wenn Sie darauf klicken, wird ein benutzerdefiniertes Fenster angezeigt. Beim Klicken wird jedoch nichts angezeigt. Ich sah die folgenden Ausnahmen in der Protokolldatei. Was verursacht dies und wie kann es behoben werden? Danke vielmals

2012-04-09 09:59:50,161 [1] ERROR Helper [(null)] - Name:TypeInitializationException
Message:The type initializer for 'System.Windows.Window' threw an exception.
Target:Void .ctor()
Stack:   at System.Windows.Window..ctor()
   at MyShared.View.ConnectionSetup..ctor()
   at MyAddIn.Connect.GetSettings()
   at MyAddIn.Connect.BtnClick(IRibbonControl control)

Name:TypeInitializationException
Message:The type initializer for 'System.Windows.FrameworkElement' threw an exception.
Target:Void .cctor()
Stack:   at System.Windows.Window..cctor()

Name:TypeInitializationException
Message:The type initializer for 'System.Windows.Documents.TextElement' threw an exception.
Target:Void .cctor()
Stack:   at System.Windows.FrameworkElement..cctor()

Name:TypeInitializationException
Message:The type initializer for 'MS.Internal.FontCache.Util' threw an exception.
Target:Int32 get_Dpi()
Stack:   at MS.Internal.FontCache.Util.get_Dpi()
   at System.Windows.SystemFonts.ConvertFontHeight(Int32 height)
   at System.Windows.Documents.TextElement..cctor()

Name:UriFormatException
Message:Invalid URI: The format of the URI could not be determined.
Target:Void CreateThis(System.String, Boolean, System.UriKind)
Stack:   at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind)
   at System.Uri..ctor(String uriString, UriKind uriKind)
   at MS.Internal.FontCache.Util..cctor()

Bearbeiten, hier ist XAML-Code

<code><Window x:Class="MyShared.View.ConnectionSetup"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
    xmlns:Converter="clr-namespace:MIMICShared.Converter" 
    WindowStartupLocation="CenterOwner"
    Title="Settings" Width="446" Height="650"  Closing="WindowClosing"
DataContextChanged="UserControlDataContextChanged" Foreground="Black" FontWeight="Normal" HorizontalAlignment="Stretch">
<Window.Resources>
    <ResourceDictionary>
        <Converter:Status2ImageConverter x:Key="string2Image"/>
    </ResourceDictionary>
</Window.Resources>

<Grid FocusManager.FocusedElement="{Binding ElementName=uname}" >
    <Grid.RowDefinitions>
        <RowDefinition Height="0"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
        <RowDefinition Height="0"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="0"></RowDefinition>
        <RowDefinition Height="Auto"></RowDefinition>
        <RowDefinition Height="5"></RowDefinition>
    </Grid.RowDefinitions>
    <GroupBox Grid.Row="1" Foreground="Blue">
        <Grid >
            <Grid.ColumnDefinitions>                    
                <ColumnDefinition Width="5"></ColumnDefinition>
                <ColumnDefinition Width="*"></ColumnDefinition>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="5"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Grid.RowDefinitions>
                <RowDefinition Height="2"></RowDefinition>
                <RowDefinition Height="30"></RowDefinition>
                <RowDefinition Height="2"></RowDefinition>
                <RowDefinition Height="*"></RowDefinition>
                <RowDefinition Height="2"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="2"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="2"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
                <RowDefinition Height="2"></RowDefinition>
            </Grid.RowDefinitions>
            <Label Grid.Row="1" Grid.ColumnSpan="4" FontSize="14" HorizontalAlignment="Center" FontWeight="Bold" VerticalAlignment="Bottom">Historical</Label>
            <GroupBox Grid.Column="1" Grid.Row="3" Header="Connections" Foreground="Blue" Grid.ColumnSpan="2">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*" ></RowDefinition>
                        <RowDefinition Height="Auto"></RowDefinition>
                    </Grid.RowDefinitions>

                    <toolkit:DataGrid x:Name="connectionlist" Margin="5" Style="{DynamicResource DataGridStyleDefault}" Background="White"
              AutoGenerateColumns="False" HeadersVisibility="All"
              SelectionMode="Single"
              GridLinesVisibility="None"                  
              ItemsSource="{Binding SettingList}" CanUserAddRows="False" CanUserDeleteRows="True"
              SelectionUnit="FullRow" SelectedItem="{Binding SelectedItem}" 
              SelectionChanged="ConnectionlistSelectionChanged"                               
              VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
                        <!-- Column definition -->
                        <toolkit:DataGrid.Columns>
                            <!-- Pool -->
                            <!--<toolkit:DataGridCheckBoxColumn Header="Pool" Width="40" Binding="{Binding pool}" />-->
                            <!-- Connections info -->
                            <toolkit:DataGridTextColumn Header="Connection Info" Width="*" Binding="{Binding host}" />
                            <toolkit:DataGridTextColumn Header="Description" Width="*"  Binding="{Binding desc}" >
                                <toolkit:DataGridTextColumn.ElementStyle>
                                    <Style TargetType="{x:Type TextBlock}">
                                        <Setter Property="TextWrapping" Value="Wrap" />
                                    </Style>
                                </toolkit:DataGridTextColumn.ElementStyle>
                            </toolkit:DataGridTextColumn>
                        </toolkit:DataGrid.Columns>
                    </toolkit:DataGrid>

                    <Grid Grid.Row="2" HorizontalAlignment="Center">
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"></ColumnDefinition>
                                <ColumnDefinition Width="Auto"></ColumnDefinition>
                            </Grid.ColumnDefinitions>
                            <Button Margin="2" Padding="10 0" x:Name="AddButton" Click="AddClicked">Add</Button>
                            <Button Grid.Column="1" Margin="2" Padding="10 0" Command="{Binding Remove}">Remove</Button>
                        </Grid>
                    </Grid>
                </Grid>
            </GroupBox>

            <GroupBox Header="Authentication" Grid.Row="5" Grid.Column="1" Foreground="Blue" Grid.ColumnSpan="2">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition  Height="Auto"/>
                        <RowDefinition  Height="2"/>
                        <RowDefinition  Height="Auto"/>
                        <RowDefinition  Height="2"/>
                        <RowDefinition  Height="Auto"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition  Width="Auto"/>
                        <ColumnDefinition  Width="5"/>
                        <ColumnDefinition  Width="Auto"/>
                        <ColumnDefinition  Width="Auto"/>
                    </Grid.ColumnDefinitions>

                    <Label Grid.Row="0" Grid.Column="0">Username:</Label>
                    <TextBox x:Name="uname" Width="100" Grid.Row="0" Grid.Column="2" Text="{Binding UserName, UpdateSourceTrigger=PropertyChanged}" ></TextBox>

                    <Label Grid.Row="2" Grid.Column="0">Password:</Label>
                    <PasswordBox x:Name="pwd" ToolTip="Password" PasswordChar="*"                             
                         Width="100" Grid.Row="2" Grid.Column="2" KeyDown="OnKeyDownHandler"></PasswordBox>
                    <Label Grid.Row="2" Grid.Column="3">
                        <Hyperlink Click="HyperlinkClick">Forgot Password?</Hyperlink>
                    </Label>
                    <CheckBox Margin="10 0 0 0" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" x:Name="saveauth" IsChecked="{Binding SaveAuth}">Save username and password</CheckBox>
                    <Button Margin="10 0 0 0" Grid.Row="4" Grid.Column="3" Click="VerifyButtonClick">OK</Button>
                </Grid>
            </GroupBox>
            <GroupBox Header="Status" Grid.Row="7" Grid.Column="1" Foreground="Blue" Grid.ColumnSpan="2">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition  Height="0"/>
                        <RowDefinition  Height="Auto"/>
                        <RowDefinition  Height="0"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition  Width="80"/>
                        <ColumnDefinition  Width="20"/>
                        <ColumnDefinition  Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <Label Grid.Row="1" Grid.Column="0">Historical</Label>
                    <Image Grid.Row="1" Grid.Column="1" 
                           Source="{Binding ElementName=historicalStatusLabel, Path=Content, Converter={StaticResource string2Image}}"
                           ToolTip="Connection Status"></Image>
                    <Label  Name="historicalStatusLabel" Grid.Row="1" Grid.Column="2" Content="{Binding ConnectionStatus, UpdateSourceTrigger=PropertyChanged}"/>
                </Grid>
            </GroupBox>
        </Grid>
    </GroupBox>
    <GroupBox Grid.Row="3" Grid.Column="1" Foreground="Blue">
        <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="0"></RowDefinition>
            <RowDefinition Height="30"></RowDefinition>
            <RowDefinition Height="0"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="0"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="0"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="0"></RowDefinition>
        </Grid.RowDefinitions>
            <Label Grid.Row="1" FontSize="14" FontWeight="Bold" HorizontalAlignment="Center" VerticalAlignment="Bottom">Real Time</Label>
                <GroupBox Header="Authorization" Grid.Row="3" Grid.Column="1" Foreground="Blue">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition  Height="Auto"/>
                <RowDefinition  Height="2"/>
                <RowDefinition  Height="Auto"/>
                <RowDefinition  Height="2"/>
                <RowDefinition  Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition  Width="Auto"/>
                <ColumnDefinition  Width="2"/>
                <ColumnDefinition  Width="Auto"/>
                <ColumnDefinition  Width="Auto"/>
            </Grid.ColumnDefinitions>

            <Label Grid.Row="0" Grid.Column="0">Username:</Label>
            <TextBox x:Name="RTDemail" Width="100" Grid.Row="0" Grid.Column="2" Text="{Binding RTDUserName, UpdateSourceTrigger=PropertyChanged}"></TextBox>

            <Label Grid.Row="2" Grid.Column="0">Password:</Label>
            <PasswordBox x:Name="RTDpwd" ToolTip="Password" PasswordChar="*"                             
                         Width="100" Grid.Row="2" Grid.Column="2" KeyDown="OnKeyDownHandler"></PasswordBox>
            <Label Grid.Row="2" Grid.Column="3">
                <Hyperlink Click="HyperlinkClickRTD">Forgot Password?</Hyperlink>
            </Label>
            <CheckBox Margin="10 0 0 0" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" x:Name="RTDsaveauth" IsChecked="{Binding RTDSaveAuth}">Save username and password</CheckBox>
            <Button Margin="10 0 0 0" Grid.Row="4" Grid.Column="3" Click="RTDVerifyButtonClick">OK</Button>
        </Grid>
    </GroupBox>
    <GroupBox Grid.Row="5" Grid.ColumnSpan="3">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="10"></ColumnDefinition>
                <ColumnDefinition Width="Auto"></ColumnDefinition>
                <ColumnDefinition Width="*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <Label Grid.Column="1" Margin="0 0 0 0" Foreground="Blue">Server</Label>
            <Label Name="RTDServerURLLabel" Grid.Column="2" Content="{Binding RTDServerURL}"></Label>
        </Grid>
    </GroupBox>
    <GroupBox Header="Status" Grid.Row="7" Grid.Column="1" Foreground="Blue">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition  Height="2"/>
                <RowDefinition  Height="Auto"/>
                <RowDefinition  Height="2"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition  Width="80"/>
                <ColumnDefinition  Width="20"/>
                <ColumnDefinition  Width="Auto"/>
            </Grid.ColumnDefinitions>
            <Label Grid.Row ="1" Grid.Column="0">Real Time</Label>
            <Image Grid.Row ="1" Grid.Column="1" 
                    Source="{Binding ElementName=RTDStatusLabel, Path=Content, Converter={StaticResource string2Image}}"
                   ToolTip="Connection Status" HorizontalAlignment="Left" Width="20"></Image>
            <Label Name="RTDStatusLabel" Grid.Row="1" Grid.Column="2" Content="{Binding RTDConnectionStatus, UpdateSourceTrigger=PropertyChanged}"></Label>
        </Grid>
    </GroupBox>
    </Grid>
    </GroupBox>        
    <Grid Grid.Row="5" Grid.Column="0" Grid.ColumnSpan="3" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"></ColumnDefinition>
                <ColumnDefinition Width="60"></ColumnDefinition>
                <ColumnDefinition Width="20"></ColumnDefinition>
        </Grid.ColumnDefinitions>
            <Button x:Name="CloseButton" Click="CloseButtonClick" Grid.Column ="1" Margin="0,0,0,0">Close</Button>
        </Grid>                  
</Grid>
</code>

Wenn Sie auf die Multifunktionsleiste klicken, wird der Code ausgeführt. ConnectionSetup ist die obige XAML-Datei

<code>private bool GetSettings()
{
    var settingUI = new ConnectionSetup();
    settingUI.DataContext = Settings;

    CenterMainWindow(settingUI, wndHandle.Handle);

    bool? result = settingUI.ShowDialog();
    return result ?? false;
}

    private void CenterMainWindow(System.Windows.Window window, IntPtr ownerHandle)
    {
        var helper = new System.Windows.Interop.WindowInteropHelper(window) {Owner = ownerHandle};

        // Center window
        // Note - Need to use HwndSource to get handle to WPF owned window,
        //        and the handle only exists when SourceInitialized has been
        //        raised

        window.SourceInitialized += delegate
                                        {
                                            // Get WPF size and location for non-WPF owner window
                                            var nonWPFOwnerLeft = XLApp.Left;
                                            var nonWPFOwnerWidth = XLApp.Width;
                                            var nonWPFOwnerTop = XLApp.Top;
                                            var nonWPFOwnerHeight = XLApp.Height;

                                            // Get transform matrix to transform non-WPF owner window
                                            // size and location units into device-independent WPF
                                            // size and location units
                                            var source = System.Windows.Interop.HwndSource.FromHwnd(helper.Handle);
                                            if (source != null && source.CompositionTarget != null)
                                            {
                                                var matrix = source.CompositionTarget.TransformFromDevice;
                                                var ownerWPFSize =
                                                    matrix.Transform(new System.Windows.Point(nonWPFOwnerWidth,
                                                                                              nonWPFOwnerHeight));
                                                var ownerWPFPosition =
                                                    matrix.Transform(new System.Windows.Point(nonWPFOwnerLeft,
                                                                                              nonWPFOwnerTop));

                                                // Center WPF window
                                                window.WindowStartupLocation = WindowStartupLocation.Manual;
                                                window.Left = Math.Max(0,
                                                                       ownerWPFPosition.X +
                                                                       (ownerWPFSize.X - window.Width)/2);
                                                window.Top = Math.Max(0,
                                                                      ownerWPFPosition.Y +
                                                                      (ownerWPFSize.Y - window.Height)/2);
                                            }
                                        };
    }
</code>

Antworten auf die Frage(3)

Ihre Antwort auf die Frage