Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2016, 19:10   #1
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию Триггеры - C# WPF

Возможно ли с помощью триггера сделать чтобы при нажатии на одну кнопку - у другой кнопки установить IsEnabled = false? В том смысле чтоб это не поменялось обратно после нажатия. И еще чтобы кнопка была IsEnabled = false если в таблице не выбрана запись.
NewLamer&Programer вне форума Ответить с цитированием
Старый 05.03.2016, 19:14   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А не проще с помощью binding'а к свойству сделать? (при нажатии кнопки менять его значение)
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.03.2016, 19:20   #3
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А не проще с помощью binding'а к свойству сделать? (при нажатии кнопки менять его значение)
может быть, я еще не очень разбираюсь в wpf а триггеры и биндинги для меня очень сложная тема((( можешь подсказать как это сделать?
NewLamer&Programer вне форума Ответить с цитированием
Старый 05.03.2016, 19:35   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Биндинги это не сложно. Посмотрите любой пример про биндинги, MVVM и т.п.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 05.03.2016, 19:36   #5
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Биндинги это не сложно. Посмотрите любой пример про биндинги, MVVM и т.п.
смотрел, кому как, для меня сложно
NewLamer&Programer вне форума Ответить с цитированием
Старый 05.03.2016, 19:49   #6
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

как то вот так чтоли?
Код:
<Button Name="Button1" IsEnabled="{Binding ElementName=Button2, Path=IsEnabled}"/>
а как сделать тогда чтобы было именно наоборот? т.е. если одна активна - вторая не активна
NewLamer&Programer вне форума Ответить с цитированием
Старый 05.03.2016, 19:58   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
смотрел, кому как, для меня сложно
Что там сложного? Создаете обычное get/set свойство и биндите к нему то, что надо, изменяете когда надо.

Ну еще обычно INotifyPropertyChanged надо реализовать и вызывать в set, чтоб элементы узнавали об его изменении.

Вот самый простой пример. Не сильно хороший, обычно в WPF используют MVVM и там биндинги и команды кнопок во ViewModel.

Код:
<Window x:Class="WpfApplication5.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        
        <Button Margin="10" IsEnabled="{Binding IsSomething}" />
        <Button Grid.Row="1" Margin="10" Click="Button2_OnClick" />
    </Grid>
</Window>
Код:
using System.ComponentModel;
using System.Windows;

namespace WpfApplication5
{
    public partial class MainWindow : Window, INotifyPropertyChanged
    {
        public MainWindow()
        {
            InitializeComponent();

            DataContext = this;
        }

        private bool _isSomething = true;
        public bool IsSomething
        {
            get
            { return _isSomething; }
            set
            {
                _isSomething = value;
                OnPropertyChanged("IsSomething"); // если .NET 4.5+, то CallMemberName вместо этого
            }
        }

        private void Button2_OnClick(object sender, RoutedEventArgs e)
        {
            IsSomething = false;
        }

        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}


Если тип свойства не совпадает с нужным (bool для IsEnabled), то IValueConverter например.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 05.03.2016 в 20:02.
Alex11223 вне форума Ответить с цитированием
Старый 05.03.2016, 20:09   #8
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

а как для кнопок то сделать? у вас не указана нигде вторая кнопка, в смысле что именно к ее свойству биндиться, а не какому то там IsSomething, я вон выше написал че то похожее на истину, но почему то не работает... + к тому же у вас столько кода вышло что мне проще тупо в обработчиках обоих кнопок прописать что если одна кнопка нажимается, то вторая становится неактивной, а я хотел все таки как то красиво и коротко в xaml
NewLamer&Programer вне форума Ответить с цитированием
Старый 05.03.2016, 20:11   #9
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

точнее там работает это у меня опечатка была, но я не знаю как инвертировать в xaml это свойство, как в c# '!' не работает
NewLamer&Programer вне форума Ответить с цитированием
Старый 05.03.2016, 20:24   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В xaml нет !, можно либо IValueConverter, либо два свойства, либо так
Код:
        <Button>
            <Control.Style>
                <Style>
                    <Setter Property="Control.IsEnabled" Value="True"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding IsSomething}" Value="True">
                            <Setter Property="Control.IsEnabled" Value="False"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Control.Style>
        </Button>
Цитата:
к тому же у вас столько кода вышло что мне проще тупо в обработчиках обоих кнопок прописать
Ну от задачи зависит, когда больше логики, чем просто отключение двух кнопок, то не проще + в WPF обычно принято использовать MVVM, тогда больше смысла в этом всем.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 05.03.2016 в 20:30.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C# + WPF] Отлов нажатий клавиш, хуки, горячие клавиши в проекте WPF Casper-SC WPF, UWP, WinRT, XAML 3 03.03.2017 15:00
триггеры на 2 контрола в WPF на basic.net Air_ Помощь студентам 0 12.01.2011 00:15
Триггеры МартинИ SQL, базы данных 4 23.12.2010 20:12
класс Screen в WPF. Есть ли такой? [?] Не добавлять же сборку Forms в WPF Casper-SC Общие вопросы .NET 2 30.07.2010 15:10
C++ Триггеры phantom4eg Помощь студентам 6 15.05.2010 14:49