0

次のコードはコンパイルすると正常に機能しますが、Text = "{x:Static local:SomeClass+Limits.Name}"をデザイナーで機能させることができません。この点でどんな助けでも大歓迎です!ありがとう....

namespace StaticTest
{
    public class SomeClass 
    {
        public static class Limits
        {
            public const string Name = "It Works!";
        }
    }
}
<Window
    x:Class="StaticTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:StaticTest"
    Title="StaticTest"
    Height="146"
    Width="296"
    WindowStartupLocation="CenterScreen">
    <TextBlock
        Grid.Column="1"
        Grid.Row="1"
        Text="{x:Static local:SomeClass+Limits.Name}" />
</Window>
4

2 に答える 2

0

@HBが言うように、バインディングが必要です:

<TextBlock Text="{Binding Source={x:Static local:SomeClass+Limits.Name}}"/>

VS2010 の設計者はこれを処理できませんが、VS11 ベータ版では問題なく動作します。

于 2012-04-21T15:27:08.467 に答える
0

わかった。結局のところ、次のようなことをする必要があります。

using System;

namespace StaticTest
{
    public abstract class AbstractViewModel<VM, LC>
        where VM : new()
        where LC : new()
    {
        public AbstractViewModel()
        {
            Limits = new LC();
        }

        static AbstractViewModel()
        {
            Instance = new VM();
        }

        public LC Limits { get; private set; }

        public static VM Instance { get; private set; }
    }

    public class MainWindowViewModel :
        AbstractViewModel<MainWindowViewModel, MainWindowViewModel.LimitsClass>
    {
        public class LimitsClass
        {
            public LimitsClass()
            {
                Lots = new MinMax<int>(1, 10);
            }

            public MinMax<int> Lots { get; private set; }
        }        
    }
}


<Window
    x:Class="StaticTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:StaticTest"
    Title="StaticTest"
    Height="146"
    Width="296"
    WindowStartupLocation="CenterScreen">
    <Grid>
        <TextBlock
            Text="{Binding Source={x:Static local:MainWindowViewModel.Instance}, Path=Limits.Lots.MaxValue}" />
    </Grid>
</Window>
于 2012-04-21T19:54:27.153 に答える