2010-09-09 16 views
17

He encontrado una situación en la que sería muy útil especificar un valor de coma flotante directamente en XAML y usarlo como recurso para varias de las piezas de mi UI. Después de buscar, encontré una buena cantidad de información sobre cómo incluir el ensamblaje adecuado (mscorlib) en su XAML para que pueda hacer eso.Usar tipos de sistema en XAML como recursos

Desafortunadamente, recibo una excepción en una instancia en la que trato de hacer esto. Aquí es el siguiente XAML que recrea la situación:

<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> 

Cuando intento compilar y ejecutar esto, me sale un XamlParseException arrojado a mí que dice que " '120' no es un valor válido para la propiedad 'width' ".

Pero la propiedad "Ancho" es una doble, entonces ¿por qué no puedo configurarlo usando el StaticResource que se definió? ¿Alguien sabe como hacer esto?

Respuesta

27

No. ColumnDefinition.Width es de tipo GridLength, por lo que se obtiene el error. Si haces algo como el siguiente código, debería funcionar bien.

<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> 
+0

¡Gracias! Funcionó. Eso ayuda mucho. No me di cuenta de que era del tipo GridLength. – David

3

El problema está encontrando es que en el objeto ColumnDefinition, la propiedad Ancho es NO un doble, que es una estructura GridLength. Si mira el MSDN documentation for ColumnDefinition.Width, verá que no puede asignar un doble a ColumnDefinition.Width

Cuestiones relacionadas