Пользовательский контроль Silverlight исчезает в дизайнере - PullRequest
0 голосов
/ 17 апреля 2009

Я пишу приложение в 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 (если кто-то хочет увидеть код для этого, скажем так), но удаление их из кода не сработало. Что может быть не так?

Я думаю, что, возможно, обнаружил одну причину проблем. Эта строка XAML в элементе управления WeatherBox получает исключение при запуске приложения:

<BitmapImage UriSource="{Binding Thumbnail, Converter={StaticResource BitmapImageConverter}}" />

Насколько я понял, невозможно использовать привязку непосредственно в UriSource, поэтому я попытался использовать конвертер. Казалось, работает в редакторе, но не при запуске. Я до сих пор понятия не имею, что случилось.

1 Ответ

1 голос
/ 18 апреля 2009

Это происходит постоянно с пользовательскими элементами управления, которые вы разрабатываете. На данный момент поддержка дизайнера визуальной студии невероятно нестабильна (бета-версия silverlight 2 & 3 с visual studio 2008). Он будет раздражен малейшей вещью и никогда не скажет вам, почему. По крайней мере, вы не получаете ошибку COM.

Самый простой способ выяснить вызывающий его элемент управления - это начать комментировать серии вашего XAML, пока вы не определите элемент управления путем исключения.

Обычно это будет один из ваших собственных элементов управления, и он будет делать это, потому что вы пытаетесь загрузить некоторые данные с веб-сайта или веб-службы, чего нельзя сделать в режиме дизайнера. Все, что вам нужно сделать, это определить, находится ли он в режиме разработки, и пропустить код, если он есть.

Вот режим проектирования с постобнаружением: http://blogs.sqlxml.org/bryantlikes/archive/2009/02/25/detecting-design-mode-in-silverlight.aspx

Ошибка привязки не является причиной, хотя ее не следует игнорировать. Это означает, что объект, к которому вы привязаны, не имеет свойства, к которому вы пытаетесь получить доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...