Frage

Ich habe eine Situation auftreten, wo es sehr nützlich wäre, einen Fließkommawert direkt in XAML zu spezifizieren und sie als Ressource nutzen für einige meiner UI Stücke. Nach der Suche um fand ich auf eine gute Menge an Informationen, wie Sie die richtige Montage (mscorlib) in XAML schließen, so dass Sie das nur tun können.

Leider erhalte ich eine Ausnahme in einem Fall, wo ich versuche, dies zu tun. Hier ist die folgende XAML, die die Situation neu erstellt:

<Window x:Class="davidtestapp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:core="clr-namespace:System;assembly=mscorlib"
    Title="MainWindow" Height="350" Width="525">

<Window.Resources>
    <core:Double x:Key="MyDouble">120</core:Double>
</Window.Resources>

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="{StaticResource MyDouble}" />
        <ColumnDefinition Width="40" />
        <ColumnDefinition Width="40" />
    </Grid.ColumnDefinitions>

    <Rectangle Grid.Column="0" Fill="Red" />
    <Rectangle Grid.Column="1" Fill="Green" />
    <Rectangle Grid.Column="2" Fill="Blue" />

</Grid>
</Window>

Wenn ich versuche, dies zu kompilieren und ausführen, ich ein XamlParseException mich geworfen bekommen, die besagt, dass „‚120‘ist kein gültiger Wert für Eigenschaft‚Breite‘“.

Aber die „Breite“ Eigenschaft is eine doppelte, also warum nicht kann ich es einstellen das Static, die unter Verwendung definiert wurde? Wer weiß, wie dies zu tun?

War es hilfreich?

Lösung

Nein. ColumnDefinition.Width ist der Typ GridLength, weshalb Sie die Fehler sind immer. Wenn Sie so etwas wie der Code unten zu tun, sollte es funktionieren.

<Window.Resources>
    <core:Double x:Key="MyDouble">300</core:Double>
    <GridLength x:Key="MyGridLength">20</GridLength>
</Window.Resources>

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="{StaticResource MyGridLength}" />
        <ColumnDefinition Width="40" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>

    <Rectangle Grid.Column="0" Fill="Red" />
    <Rectangle Grid.Column="1" Fill="Green" />
    <Rectangle Grid.Column="2" Fill="Blue"  Width="{StaticResource MyDouble}"/>

</Grid>

Andere Tipps

Das Problem, das Sie stoßen werden, ist, dass auf dem Column Objekt, die Width-Eigenschaft ist nicht ein Doppel, es ist eine GridLength Struktur ist. Wenn man sich die MSDN-Dokumentation für Column. Breite Sie sehen, dass Sie nicht die doppelte zu einem ColumnDefinition.Width

zuweisen
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top