Проблема дизайнера атрибутов видимости WPF - PullRequest
3 голосов
/ 22 апреля 2011

Недавно у меня начались проблемы с атрибутом Visibility во время разработки.Все отлично работает во время выполнения, но атрибут Visibility не влияет на время разработки.

Я переустановил Visual Studio и .net framework, но проблема не устранена.

Пример кода:

<StackPanel>
        <TextBlock Text="X" Visibility="Collapsed" Background="Red" />
        <TextBlock Text="Y"></TextBlock>
</StackPanel>

Во время выполнения X сворачивается, в то время как во время разработки оно отображается.

Ответы [ 2 ]

3 голосов
/ 22 апреля 2011

Установка VS2010 SP1 устранила проблему. SP можно найти по адресу: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=75568aa6-8107-475d-948a-ef22627e57a5

1 голос
/ 22 апреля 2011

попробуйте Ctrl + Shift + B после того, как вы изменили код .. это может вам помочь ..

Но я рекомендую вам установить Microsoft Expression Blend.И сделайте всю разметку Xaml там.


Обновление:

Или вы можете использовать это:

public class VisibilityFixer: DependencyObject
{
    public static bool GetFixDesigner(DependencyObject obj)
    {
        return (bool)obj.GetValue(FixDesignerProperty);
    }

    public static void SetFixDesigner(DependencyObject obj, bool value)
    {
        obj.SetValue(FixDesignerProperty, value);
    }

    // Using a DependencyProperty as the backing store for FixDesigner.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty FixDesignerProperty =
        DependencyProperty.RegisterAttached("FixDesigner", typeof(bool), typeof(VisibilityFixer),
        new UIPropertyMetadata(false, new PropertyChangedCallback(PropertyChanged)));

    public static void PropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        var obj = sender as FrameworkElement;

        if (obj != null)
        {
            if ((bool)(DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue)) 
            {
               if (obj.Visibility == Visibility.Collapsed)
                {
                    obj.Opacity = 0;
                    obj.Height = 0;
                    obj.Width = 0;
                } 
                else if (obj.Visibility == Visibility.Hidden)
                {
                    obj.Opacity = 0;
                }             
            }
        }
    }
}

и использовать егокак это ..

 <StackPanel x:Name="LayoutRoot">
    <TextBlock TextWrapping="Wrap" 
         Visibility="Collapsed" 
         fx:VisibilityFixer.FixDesigner="True" 
         Text="TextBlock3243" HorizontalAlignment="Left" 
         Background="Red" />
    <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap"><Run Text="TextBlock"/></TextBlock>
</StackPanel>

, а затем используйте Ctrl + Shift + B

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