-6 / 2 / 1
Регистрация: 14.08.2013
Сообщений: 80
1
.NET 4.x

Выпадающая ошибка TextBlock

04.07.2014, 18:38. Показов 1251. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, я хочу реализовать вид ошибки как на этом видео (скриншоты -> вложения):

Я пробовал это сделать, но у меня всё иначе, когда текстовый блок появляется, то он сдвигает окно программы вниз(за границу часть программы в невидное место)
вот моё приложение там всё видно как выводиться ошибка и как сдвигает часть программы вниз за границу окна. А также видна часть самого Textblock когда сам текст ещё не активен. Буду очень благодарен за помощь.
Вот как выводиться сама ошибка:
XML
1
2
3
<StackPanel Grid.Row="2" MouseLeftButtonDown="Window_MouseDown" Height="auto" Width="370" Background="Orange">
<TextBlock TextAlignment="Left" FontSize="14px" Height="auto" TextWrapping="Wrap" x:Name="txtName" Foreground="#fe0308" Text="{Binding Name}"/>
</StackPanel>

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public Window1()
{
InitializeComponent();
txtName.DataContext = obj;
}
 
 
        class SomeObjectClass : INotifyPropertyChanged
        {
            private string _name = "";
            public string Name
            {
                get
                {
                    return _name;
                }
                set
                {
                    _name = value;
                    OnPropertyChanged("Name");
                }
            }
 
            public event PropertyChangedEventHandler PropertyChanged;
 
            public void OnPropertyChanged(string PropertyName)
            {
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
            }
        }
Сам текст:
C#
1
obj.Name = "Мы не смогли авторизовать вас, используя указанные данные.";
Миниатюры
Выпадающая ошибка TextBlock   Выпадающая ошибка TextBlock  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.07.2014, 18:38
Ответы с готовыми решениями:

Выпадающая менюшка
Есть меню &lt;ul&gt;&lt;li&gt;первая менюшка &lt;ul&gt;&lt;li&gt;ссылка&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt; &lt;li&gt;вторая менюшка...

Выпадающая менюшка
Подскажите как из данного меню можно сделать выпадающие? Что бы допустим при клике на раздел Книги...

Выпадающая информация
На своем сайте давно использую очень удобный прием: На странице имеется некая ссылка. При нажатии...

Выпадающая форма
Друзья, я полный нуб. Поиск результатов не дал(скорее всего неправильно ищу) Есть вопрос. Очень...

5
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.07.2014, 21:20 2
Скорее всего, у тебя жёстко задан размер окна.

Добавлено через 59 секунд
Вместо Height пропиши то же самое значение для MinHeight. А вообще выкладывать нужно было код самого окна, а не кусок кода не в тему, при том оба обрывка кода к проблеме не имеют отношения. Без разницы как там текст отображается, тут нужно разметку окна смотреть.

Добавлено через 2 минуты
И вообще советую не в каждом классе реализовывать интерфейс INotifyPropertyChanged, а создать базовый класс и от него наследовать. Иначе устанешь везде одно и тоже копипастить.

Добавлено через 1 час 26 минут
Да, дело тут явно не в MinHeight и т.д.

Добавлено через 24 секунды
Попробовал сделать как у Близард.
0
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
04.07.2014, 21:57 3
задай окну свойство размера = подгон по содержимому
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.07.2014, 22:26 4
Лучший ответ Сообщение было отмечено FROSTITAN как решение

Решение

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<Window x:Class="Wpf_Animation.AuthDialog"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="AuthDialog"
        Width="300"
        WindowStartupLocation="CenterScreen">
 
    <Window.Style>
        <StaticResource ResourceKey="DefaultWindowStyle" />
    </Window.Style>
 
    <Grid Margin="4,0,9,9">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="150" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="230" />
        </Grid.RowDefinitions>
 
        <Border Grid.RowSpan="4"
                Background="#FFF3F1F1"
                Style="{StaticResource BackgroundBorderStyle}">
            <TextBox Text="TextBox"
                     TextWrapping="Wrap" />
        </Border>
        <Border Grid.Row="0"
                Height="45"
                VerticalAlignment="Top"
                Background="#FFEAE7E7"
                BorderThickness="1,1,1,0"
                MouseLeftButtonDown="Border_MouseLeftButtonDown" />
 
        <Button Grid.Row="1"
                Height="26"
                Margin="48,113,33,0"
                VerticalAlignment="Top"
                Click="Button_Click"
                Content="Button" />
 
        <Button Grid.Row="3"
                Height="26"
                Margin="40,0,40,10"
                VerticalAlignment="Bottom"
                Click="Button_Click"
                Content="Button" />
 
        <TextBlock x:Name="_errorText"
                   Grid.Row="2"
                   Margin="1,0"
                   Height="0 "
                   Background="#FFE07373"
                   Text="ErrorText"
                   TextAlignment="Center"
                   TextWrapping="Wrap" />
 
        <Button Grid.Row="0"
                Width="26"
                Margin="0,9,10,10"
                HorizontalAlignment="Right"
                Click="CloseButton_Click"
                Content="X" />
    </Grid>
</Window>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media.Animation;
 
namespace Wpf_Animation
{
    public partial class AuthDialog : Window
    {
        public AuthDialog()
        {
            InitializeComponent();
        }
 
        private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            DragMove();
        }
 
        private void CloseButton_Click(object sender, RoutedEventArgs e)
        {
            Application.Current.Shutdown();
        }
 
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            double height = 0;
            if (_errorText.Height == 0)
            {
                height = 45;
            }
            else
            {
                height = 0;
            }
 
            DoubleAnimation heightAnimation = new DoubleAnimation();
            heightAnimation.AccelerationRatio = 0.3;
            heightAnimation.To = height;
            heightAnimation.Duration = TimeSpan.FromMilliseconds(150);
            _errorText.BeginAnimation(HeightProperty, heightAnimation);
        }
    }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 
    <!--  Стиль для фона всех бордеров окон (фон окна)  -->
    <Style x:Key="BackgroundBorderStyle"
         TargetType="{x:Type Border}">
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="BorderBrush" Value="Black" />
    </Style>
 
    <!--  эффект тени для всех нестандартных окон  -->
    <DropShadowEffect x:Key="WindowDropShadowEffectKey"
                    BlurRadius="7"
                    Opacity="0.8"
                    ShadowDepth="3" />
 
    <!--  Стиль окна настроек  -->
    <Style x:Key="DefaultWindowStyle"
         TargetType="{x:Type Window}">
        <Setter Property="Background" Value="Transparent" />
        <Setter Property="AllowsTransparency" Value="True" />
        <Setter Property="ResizeMode" Value="NoResize" />
        <Setter Property="WindowStyle" Value="None" />
        <Setter Property="FontSize" Value="14" />
        <Setter Property="Effect" Value="{StaticResource WindowDropShadowEffectKey}" />
    </Style>
    
</ResourceDictionary>
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<Application x:Class="Wpf_Animation.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="AuthDialog.xaml">
    <!--StartupUri="MainWindow.xaml"-->
    <!--StartupUri="AuthDialog.xaml"-->
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Resources/Skins/Main.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>
Добавлено через 2 минуты
Я сильно не заморачивался. Главное работает как надо и с анимацией. Поэтому так как есть.

Добавлено через 3 минуты
Вот держи базовый класс для всех вью моделей.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Windows;
 
namespace Wpf_Animation.Mvvm
{
    public abstract class ViewModelBase : INotifyPropertyChanged, IDisposable
    {
        private static bool? _isInDesignMode;
 
        protected ViewModelBase()
        {
        }
 
        public virtual String DisplayName { get; protected set; }
 
        protected virtual bool ThrowOnInvalidPropertyNames { get; private set; }
 
        /// <summary>
        /// Gets a value indicating whether the control is in design mode
        ///             (running under Blend or Visual Studio).
        /// 
        /// </summary>
        public bool IsInDesignMode
        {
            get
            {
                return IsInDesignModeStatic;
            }
        }
 
        /// <summary>
        /// Gets a value indicating whether the control is in design mode
        ///             (running in Blend or Visual Studio).
        /// 
        /// </summary>
        public static bool IsInDesignModeStatic
        {
            get
            {
                if (!_isInDesignMode.HasValue)
                    _isInDesignMode = new bool?((bool)DependencyPropertyDescriptor.FromProperty(
                        DesignerProperties.IsInDesignModeProperty, typeof(FrameworkElement)).Metadata.DefaultValue);
                return _isInDesignMode.Value;
            }
        }
 
        [field: NonSerialized]
        public event PropertyChangedEventHandler PropertyChanged;
 
        [Conditional("DEBUG")]
        [DebuggerStepThrough]
        public void VerifyPropertyName(string propertyName)
        {
            if (null == TypeDescriptor.GetProperties(this)[propertyName])
            {
                string msg = "Invalid property name: " + propertyName;
                if (ThrowOnInvalidPropertyNames)
                    throw new Exception(msg);
                else
                    Debug.Fail(msg);
            }
        }
 
        protected void RaisePropertyChanged(string propertyName)
        {
            VerifyPropertyName(propertyName);
            var handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
 
        protected virtual void OnDispose()
        {
        }
 
        public void Dispose()
        {
            OnDispose();
        }
    }
}
Добавлено через 1 минуту
В нём фишка такая есть, что если ты где-то укажешь неправильно имя свойства, то в режиме дебага вылетит сообщение, реально иногда спасает от поисков, почему не биндится (особенно после переименования свойств).
1
995 / 893 / 354
Регистрация: 24.03.2014
Сообщений: 2,381
Записей в блоге: 2
05.07.2014, 00:06 5
IDisposable-то к чему в базовой реализации?
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
05.07.2014, 01:47 6
Цитата Сообщение от Spawn Посмотреть сообщение
IDisposable-то к чему в базовой реализации?
На самом деле, похоже, что в данной ситуации ни к чему. Скопипастил код, который сам использовал. На тот момент меня не особо интересовало зачем там реализация этого интерфейса... Но юзать это уж точно лучше, чем городить реализацию в каждом классе..
0
05.07.2014, 01:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2014, 01:47
Помогаю со студенческими работами здесь

Выпадающая форма
Всем привет. Можно ли сделать выпадающую форму средствами только CSS и HTML, если да то расскажите...

Выпадающая панель (спойлер)
нужен компонент похожий на спойлер, но чтобы в нем можно было размещать другие компоненты(не только...

выпадающая таблица jquery
Помогите создать меню с выпадающим табло с ссылками, таблица создана на css при наведении на...

Выпадающая сверху панель
Всем привет. Пытаюсь решить, как сделать выпадающую панель... По клику на иконке в ActionBar хочу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru