2010-09-09 27 views
17

Tôi đã gặp phải một tình huống rất hữu ích khi chỉ định giá trị dấu phẩy động trực tiếp trong XAML và sử dụng nó làm tài nguyên cho một số phần giao diện người dùng của tôi. Sau khi tìm kiếm xung quanh tôi tìm thấy một số lượng tốt thông tin về cách bao gồm lắp ráp thích hợp (mscorlib) trong XAML của bạn để bạn có thể làm điều đó.Sử dụng các loại hệ thống trong XAML làm tài nguyên

Thật không may, tôi nhận được ngoại lệ trong một trường hợp mà tôi cố gắng thực hiện việc này. Đây là XAML sau đó tái tạo lại tình hình:

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

Khi tôi cố gắng để biên dịch và chạy này, tôi nhận được một XamlParseException ném vào tôi mà nói rằng: " '120' không phải là một giá trị hợp lệ cho bất động sản 'rộng' ".

Nhưng thuộc tính "Chiều rộng" đôi, vậy tại sao tôi không thể đặt bằng cách sử dụng StaticResource đã được xác định? Có ai biết cách để làm điều này không?

Trả lời

27

No. ColumnDefinition.Width thuộc loại GridLength, đó là lý do bạn nhận được lỗi. Nếu bạn làm một cái gì đó giống như mã dưới đây, nó sẽ hoạt động tốt.

<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

Cảm ơn! Nó đã làm việc. Điều đó giúp ích rất nhiều. Tôi đã không nhận ra rằng đó là loại GridLength. – David

3

Vấn đề bạn đang gặp phải là trên đối tượng ColumnDefinition, tài sản Width là KHÔNG một đôi, nó là một cấu trúc GridLength. Nếu bạn nhìn vào số MSDN documentation for ColumnDefinition.Width bạn sẽ thấy rằng bạn không thể chỉ định một đôi cho một ColumnDefinition.Width

Các vấn đề liên quan