【问题标题】:Visual Studio does not show design dataVisual Studio 不显示设计数据
【发布时间】:2017-07-17 11:36:56
【问题描述】:

我目前正在尝试将设计数据集成到我的 UWP 应用中。 对于这种方法,我遵循了 microsoft 的步骤:https://docs.microsoft.com/en-us/windows/uwp/data-binding/displaying-data-in-the-designer

我的问题:数据不会显示。只有绑定的名称:

但我希望结果更像这样:(旧版本,运行时屏幕)

那么我是如何实现它的呢?
我决定使用“DesignInstance”,因为已经有一个 ViewModel,以后无论如何都会使用它(目前在运行时可以正常工作)。

正因为如此,我的“MockupViewModel”继承了原始的ViewModel,并在默认构造函数中创建了虚值:

public class MockupModel
    : WeatherViewModel
{
    public MockupModel() : base()
    {
        Random Randomizer = new Random();

        CurrentData.PrecipitationIcon = WeatherUnicodeIconLib.Neutral.Snow;
        CurrentData.PrecipitationValue = 0.234;
        CurrentData.SunRiseSetIcon = WeatherUnicodeIconLib.Miscellaneous.SunRise;
        CurrentData.SunRiseSetTime = DateTime.Now;
        CurrentData.TemperatureUnitIcon = WeatherUnicodeIconLib.Miscellaneous.Celsius;
        CurrentData.TemperatureValue = -20.75;
        CurrentData.WeatherStatusDescription = "lorem ipsum";
        CurrentData.WeatherStatusIcon = OpenWeatherMapUnicodeStatusIconAdapter.GetStandardIconUnicode(200);
        CurrentData.WindDirectionDegrees = 240.7;
        CurrentData.WindSpeedIcon = WeatherUnicodeIconLib.GetBeaufortScaleIcon(3);

        for (int i = 0; i < 7; i++)
        {
            DailyForecastViewModel NewForecastItem = new DailyForecastViewModel();

            NewForecastItem.Day = DateTime.Now;
            NewForecastItem.TemperatureValue = Randomizer.Next(-30, 30);
            NewForecastItem.WeatherSatusIcon = OpenWeatherMapUnicodeStatusIconAdapter.GetStandardIconUnicode(300);
            NewForecastItem.WindSpeedIcon = WeatherUnicodeIconLib.GetBeaufortScaleIcon(Randomizer.Next(0, 12));

            DailyForecast.Add(NewForecastItem);
        }
    }
}

之后,MockupViewModel 已添加到 XAML 代码中:
(看看 UserControl 标题/标签的最后一行)

<UserControl
x:Class="WeatherControl.WeatherControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
xmlns:vm="using:WeatherControl.ViewModel"
d:DataContext="{d:DesignInstance Type=vm:MockupModel, IsDesignTimeCreatable=True}">

<UserControl.Resources>
    <SolidColorBrush x:Key="FontColor">White</SolidColorBrush>
    <x:Double x:Key="MainInfoFontSize">90</x:Double>

    <Style TargetType="TextBlock">
        <Setter Property="FontFamily" Value="{StaticResource WeatherIcons}"/>
        <Setter Property="Foreground" Value="{StaticResource FontColor}"/>
        <Setter Property="FlowDirection" Value="LeftToRight"/>
        <Setter Property="FontSize" Value="30"/>
    </Style>
</UserControl.Resources>

<StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <StackPanel
        HorizontalAlignment="Stretch"
        Padding="20">

        <StackPanel
            HorizontalAlignment="Stretch"
            Orientation="Horizontal"
            FlowDirection="RightToLeft">
            <TextBlock
                x:Name="SunSetRiseTime"
                Text="{Binding Path=CurrentData.SunRiseSetTime}"/>
            <TextBlock
                x:Name="SunSetRiseIcon"
                Text="{Binding Path=CurrentData.SunRiseSetIcon}"
                Margin="10,0,30,0"/>

            <TextBlock
                x:Name="WindDirectionIcon"
                Text="&#xf0b1;"
                RenderTransformOrigin="0.5 0.5">
                <TextBlock.RenderTransform>
                    <RotateTransform Angle="{Binding Path=CurrentData.WindDirectionDegrees}"/>
                </TextBlock.RenderTransform>
            </TextBlock>
            <TextBlock
                x:Name="WindBeaufortScaleIcon"
                Text="{Binding Path=CurrentData.WindSpeedIcon}"
                Margin="10,0,30,0"/>

            <TextBlock
                x:Name="PrecipitationIcon"
                Text="{Binding Path=CurrentData.PrecipitationIcon}"
                RenderTransformOrigin="0.5 0.5"/>
            <TextBlock
                x:Name="PrecipitationIconValue"
                Text="{Binding Path=CurrentData.PrecipitationValue}"
                Margin="10,0,20,0"/>
        </StackPanel>

        <StackPanel
            x:Name="MainInfos"
            HorizontalAlignment="Stretch"
            Orientation="Horizontal"
            FlowDirection="RightToLeft">
            <TextBlock
                x:Name="TemperatureUnitIcon"
                Text="{Binding Path=CurrentData.TemperatureUnitIcon}"
                FontSize="{StaticResource MainInfoFontSize}"
                Margin="0,0,10,0"/>
            <TextBlock
                Name="TemperatureValue"
                Text="{Binding Path=CurrentData.TemperatureValue}"
                FlowDirection="LeftToRight"
                FontSize="{StaticResource MainInfoFontSize}"
                Margin="0,0,40,0"/>
            <TextBlock
                x:Name="WeatherStatusIcon"
                Text="{Binding Path=CurrentData.WeatherStatusIcon}"
                FontSize="{StaticResource MainInfoFontSize}"/>
        </StackPanel>

        <TextBlock
                x:Name="WeatherDescription"
                Text="{Binding Path=CurrentData.WeatherStatusDescription}"
                TextAlignment="Right"
                Margin="0,0,0,20"/>

        <ListBox
            x:Name="DailyForecasts"
            HorizontalAlignment="Stretch"
            FlowDirection="RightToLeft"
            Background="Transparent"
            ItemsSource="{Binding Path=DailyForecast}">
            <ListBox.ItemContainerStyle>
                <Style TargetType="ListBoxItem">
                    <Setter Property="Padding" Value="0"/>

                </Style>
            </ListBox.ItemContainerStyle>
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel
                        x:Name="ForecastDay"
                        Orientation="Horizontal"
                        HorizontalAlignment="Stretch">
                        <TextBlock
                            x:Name="WindSpeed"
                            TextAlignment="Left"
                            Text="{Binding Path=WindSpeedIcon}"
                            Width="70"/>
                        <TextBlock
                            x:Name="Temperature"
                            TextAlignment="Right"
                            Text="{Binding Path=TemperatureValue}"
                            Width="60"/>
                        <TextBlock
                            x:Name="WeatherIcon"
                            TextAlignment="Center"
                            Text="{Binding Path=WeatherSatusIcon}"
                            Width="100"/>
                        <TextBlock
                            x:Name="DayName"
                            TextAlignment="Left"
                            Text="{Binding Path=Day}"
                            Width="70"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </StackPanel>
</StackPanel>

您还可以查看我在 github 上的项目以获取更详细的代码: https://github.com/Wasserwecken/SmartMirror

我希望你能在这里帮助我,提前谢谢!!!

【问题讨论】:

    标签: c# visual-studio xaml mvvm uwp


    【解决方案1】:

    解决方案是确保您使用的是 x86 配置,然后单击 Visual Studio 中名为“启用项目代码”的按钮:

    来自这两个位置的更多信息:

    1)"MSDN: Debugging or Disabling Project Code in XAML Designer"

    禁用项目代码可能会导致设计时数据丢失。另一种方法是调试在设计器中运行的代码。

    2)Enabling / Disabling design data in Visual Studio 2015 Update 1

    在禁用按钮的情况下,你仍然可以通过某种方式编辑 UI,因为会显示属性的名称,并且至少可以设置字体、字号、前景色等,这比没有。

    不幸的是,Visual Studio 2015 的设计器有很多错误,因此您最终可能会遇到与我相同的问题:当您切换到 x86 时,Visual Studio 会抱怨“无效标记”。 Blend for Visual Studio 具有相同的按钮,如果没有帮助,您可以尝试该按钮或 VS2017 RC。

    【讨论】:

    • 没有任何帮助:(我尝试启用“设计数据”,将配置设置为 x86 并在 2017 RC 中执行此操作。但“无效标记”仍然存在 :(
    • 在 VS2017 中也是一样的。这个解决方案立即解决了我的问题!
    • 我花了好几个小时想知道为什么我的模拟数据突然没有生成。在过去几周的某个时间里,一定是在没有意识到的情况下点击了“项目代码”按钮(顺便说一下,以上所有内容仍然适用于 VS2019 16.3.10...)。
    【解决方案2】:

    我随机回答。

    • 将平台设置为“x86”后(x64不起作用)
    • 并启用“项目代码” (关于 Mikael Koskinen 的回答)
    • 将我的“MockupModel”移动到 与 UserControl 相同的命名空间 (关于https://stackoverflow.com/a/17484110/3885480
    • 我将配置设置为“发布”

      --> 成功了!

    所以我检查了我的项目设置以找出原因,并比较了配置
    (发布/调试)

    • 检查后“优化代码”(用于调试配置)
    • 重建(重要)

    • --> 不再有“无效标记”
    • --> 带有他的数据的 MockupModel 正确显示了!

    这适用于“VS 2015 Comminity Update3”和“VS 2017 RC”

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多