Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не могу заставить работать тригер 
:(
    Опции темы
musson
Дата 17.6.2009, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 28.9.2008

Репутация: нет
Всего: нет



Код

тиль
<Style x:Key="StyleButton1">
            <Style.Triggers>
                <Trigger Property="local:ImageFoto.CamIsOn" Value="true">
                    <Setter Property="Button.IsEnabled" Value="true"></Setter>
                </Trigger>
                
            </Style.Triggers>
        </Style>


применяем стиль
            <Button Name="bGetFoto" FontSize="16" Click="bGetFoto_Click" IsEnabled="False" Style="{StaticResource StyleButton1}" >Сфотографировать
            </Button>
  

зависимое свойство
 public static readonly DependencyProperty CamIsOnProperty =
        DependencyProperty.Register("CamIsOn", typeof(bool), typeof(ImageFoto),new PropertyMetadata(false));
   

        public bool CamIsOn
        {
            get { return (bool)this.GetValue(CamIsOnProperty); }
            set { this.SetValue(CamIsOnProperty, value); }
        }



свойства CamIsOn меняется на true, а кнопка так и остается IsEnabled="False", ведь в стиле я описал тригер, что при значении CamIsOn =true должно быть IsEnabled="True"
Где я облажался?)))
PM MAIL   Вверх
musson
Дата 17.6.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 28.9.2008

Репутация: нет
Всего: нет



хм а сделал привязку и все заработало
Код



 <Button Name="bGetFoto" FontSize="16" Click="bGetFoto_Click" IsEnabled="{Binding Path=CamIsOn RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:ImageFoto, AncestorLevel=1}}" >Сфотографировать
            </Button>


а почему же стиль не работает((((
PM MAIL   Вверх
musson
Дата 17.6.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 28.9.2008

Репутация: нет
Всего: нет



видемо тригер может отслеживать зависимые свойства только того объекта к которому принадлежит(((
т.к. SourceName он воспринимать отказывается(((

Это сообщение отредактировал(а) musson - 17.6.2009, 23:16
PM MAIL   Вверх
Человек01
Дата 16.7.2009, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 87
Регистрация: 20.2.2009
Где: Абакан, респ. Хак асия, Россия

Репутация: 2
Всего: 2



musson, вот смотри пример с Style который работает:

проект test010

Window1.xaml:
Код

x:Class="test010.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:loc="clr-namespace:test010"
        Title="Window1" Height="300" Width="300" WindowStyle="None" ResizeMode="CanResizeWithGrip"
        Name="MEGA">    
    <Window.Resources>
        <Style x:Key="StyleButton1">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=CamIsOn, ElementName=MEGA}" Value="False">
                    <Setter Property="Button.IsEnabled" Value="False"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid Name="MegaGrid">
        <Grid.RowDefinitions>
            <RowDefinition Height="30*" />
            <RowDefinition Height="200*" />
            <RowDefinition Height="32*" />
        </Grid.RowDefinitions>
        <CheckBox Name="cc" IsChecked="{Binding Path=CamIsOn,Mode=TwoWay, ElementName=MEGA}">Нажми меня</CheckBox>
        <Button Grid.Row="1" Name="bGetFoto" FontSize="16"  Style="{StaticResource StyleButton1}" >Хм</Button>
    </Grid>
</Window>


Windwo1.xaml.cs:
Код

using System.Windows;
namespace test010
{
    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();            
        }

        public static readonly DependencyProperty CamIsOnProperty =
        DependencyProperty.Register("CamIsOn", typeof(bool), typeof(Window1), new PropertyMetadata(false));

        public bool CamIsOn
        {
            get { return (bool)this.GetValue(CamIsOnProperty); }
            set { this.SetValue(CamIsOnProperty, value); }
        }
    }
}


Давай теперь рассмотрим что было не верно в твоей первой реализации
1.Это то что ты использовал Trigger, а надо использовать DataTrigger. Ведь ты собираешься использовать данные уже существующего экземпляра объекта( тут могу конечно ошибаться так что пинать не надо, но мне кажется так)
2.Ты сделал так:
Код

<Button Name="bGetFoto" FontSize="16" Click="bGetFoto_Click" IsEnabled="False" Style="{StaticResource StyleButton1}" >Сфотографировать
            </Button>

Ключевой момент это то что ты явно указал  IsEnabled="False" ВСЁ из за этого триггер уже не поменяет это значение НИКОГДА (Вроде так)
Можешь и сам проверить добавив IsEnabled="False" в Buttom и заменив на
Код

<DataTrigger Binding="{Binding Path=CamIsOn, ElementName=MEGA}" Value="False">
                    <Setter Property="Button.IsEnabled" Value="False"></Setter>
                </DataTrigger>

соответствующую часть кода
Вот собственно и всё.
В общем пользуемся и говорим [i]Человеку спасибо.[/I]  smile 


Это сообщение отредактировал(а) Человек01 - 16.7.2009, 07:20
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0857 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.