我正在Silverlight中编写一个应用程序,该应用程序应该从Google检索天气数据然后显示它。我正在研究XAML中的布局,并且会看到它在设计器中的外观,但是当我切换到设计器窗格时,一个小小的通知说组件已经更新,所以我点击它,用户控件消失了!我一直试图删除最近的标记部分,但它似乎没有帮助。以下是主要用户控件的XAML:
<UserControl x:Class="TestApp2.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
xmlns:wtb="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Extended"
xmlns:local="clr-namespace:TestApp2"
Width="400" Height="300">
<Grid x:Name="LayoutRoot" Background="#FF5e59e4">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border Grid.Row="0" Grid.Column="0" Margin="5" CornerRadius="5" Background="AliceBlue">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="100" />
<ColumnDefinition Width="70" />
</Grid.ColumnDefinitions>
<Border Grid.Row="0" Grid.Column="0" Margin="3" Style="{StaticResource RoundedBox}" >
<TextBlock x:Name="TextBox" Text="Weather Finder" Margin="5,0,0,0" FontSize="18" VerticalAlignment="Center"/>
</Border>
<wtb:WatermarkedTextBox Grid.Row="0" Grid.Column="1" Watermark="City..." Margin="2,4,2,4" />
<Button x:Name="SearchButton" Grid.Row="0" Grid.Column="3" Content="Search" VerticalAlignment="Center" Margin="2,0,2,0" />
<!--<ListBox x:Name="DataList" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Margin="3,0,3,3" />-->
<StackPanel Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" Margin="3,0,3,3" Orientation="Vertical">
<local:WeatherBox x:Name="Cur" HorizontalAlignment="Center" />
<StackPanel Orientation="Horizontal">
<local:WeatherBox x:Name="Day1" HorizontalAlignment="Center" />
<local:WeatherBox x:Name="Day2" HorizontalAlignment="Center" />
<local:WeatherBox x:Name="Day3" HorizontalAlignment="Center" />
<local:WeatherBox x:Name="Day4" HorizontalAlignment="Center" />
</StackPanel>
</StackPanel>
</Grid>
</Border>
</Grid>
</UserControl>
我还没有在应用程序中编写任何功能,所以这不是问题所在。我相信它可能与我自己的WeatherBox有关(如果有人想看到它的代码那么说),但是从代码中删除它们不起作用。可能有什么不对?
我想我可能已经发现了问题的一个原因。当我运行应用程序时,WeatherBox控件中的这一行XAML会出现异常:
<BitmapImage UriSource="{Binding Thumbnail, Converter={StaticResource BitmapImageConverter}}" />
据我所知,在UriSource中直接使用绑定是不可能的,所以我尝试使用转换器。它似乎在编辑器中工作,但在运行时却没有。我仍然不知道出了什么问题。
答案 0 :(得分:1)
这种情况一直伴随着您设计的自定义控件。目前,视觉工作室设计师的支持是令人难以置信的片状(Silverlight 2&amp; 3 beta与visual studio 2008)。它会有一丝不苟的态度,永远不会告诉你原因。至少你没有收到COM错误。
找出导致它的控件的最简单方法是开始注释掉你的XAML,直到通过消除来识别控件。
通常它将是您自己的控件之一,它会这样做,因为您试图从网站或Web服务下载一些数据,而这在设计者模式下是无法做到的。您需要做的就是检测它是否处于设计模式并跳过代码。
这是一个帖子邻接检测设计模式:http://blogs.sqlxml.org/bryantlikes/archive/2009/02/25/detecting-design-mode-in-silverlight.aspx
绑定错误不是原因,但不应忽略。这意味着您绑定的对象没有您尝试访问的属性。