2010-09-09 3 views
17

Я столкнулся с ситуацией, когда было бы очень полезно указать значение с плавающей запятой непосредственно в XAML и использовать его в качестве ресурса для нескольких моих элементов пользовательского интерфейса. После поиска я нашел много информации о том, как включить надлежащую сборку (mscorlib) в ваш XAML, чтобы вы могли сделать именно это.Использование системных типов в XAML в качестве ресурсов

К сожалению, я получаю исключение в одном экземпляре, где я пытаюсь это сделать. Вот следующий XAML, который воссоздает ситуацию:

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

При попытке компиляции и запуска этого я получаю XamlParseException брошенный на меня, который говорит, что «„120“не является допустимым значением для свойства„Ширина“ ».

Но свойство «Ширина» - это - это двойной, так почему я не могу установить его с использованием установленного StaticResource? Кто-нибудь знает как это сделать?

ответ

27

No. ColumnDefinition.Width имеет тип GridLength, поэтому вы получаете ошибку. Если вы сделаете что-то вроде кода ниже, он должен работать нормально.

<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

Спасибо! Это сработало. Это очень помогает. Я не знал, что это тип GridLength. – David

3

Проблема вы столкнулись в том, что на объекте ColumnDefinition, Ширина свойство НЕ двойной, это GridLength структура. Если вы посмотрите на MSDN documentation for ColumnDefinition.Width, вы увидите, что вы не можете назначить double ColumnDefinition.Width

 Смежные вопросы

  • Нет связанных вопросов^_^