ToggleButton не снимается при нажатии - PullRequest
0 голосов
/ 16 декабря 2009

У меня есть кнопка ToggleButton, которая работает со сбоями. Насколько я понимаю, кнопка ToggleButton должна проверяться при нажатии, а затем отключаться при повторном нажатии.

ToggleButton в этом примере этого не делает. Нажатие на это просто устанавливает его снова проверено. Есть идеи почему?

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid>  
        <ToggleButton Width="100" Height="35"  Name="btnAddLinkComment" >           
             <CheckBox Content=" Comment" FlowDirection="RightToLeft" IsHitTestVisible="False" 
                       Focusable="False" IsChecked="{Binding ElementName=txtLinkComment,  Path=Text}" 
                       Name="chkHasComment" Margin="5"/>
        </ToggleButton>
        <Popup IsOpen="{Binding ElementName=btnAddLinkComment,Path=IsChecked}"  
               PlacementTarget="{Binding ElementName=btnAddLinkComment}"  Name="popAddCommentLink"
               AllowsTransparency="True" StaysOpen="False" PopupAnimation="Fade"  HorizontalOffset="-50"
               VerticalOffset="50">
            <Border BorderBrush="#FF000000" Background="LightBlue" BorderThickness="1,1,1,1" 
                    CornerRadius="8,8,8,8" Padding="5">
                <Grid Background="LightBlue">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="80"></ColumnDefinition>
                        <ColumnDefinition Width="200"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <TextBlock TextWrapping="Wrap" Foreground="Black">Enter Link Comment:</TextBlock>
                    <TextBox Grid.Column="1" Name="txtLinkComment" Width="200"></TextBox>
                </Grid>
            </Border>
        </Popup>
  </Grid>
</Page>

Ответы [ 3 ]

1 голос
/ 16 декабря 2009

Я не совсем уверен, чего вы хотите достичь, но приведенный ниже код может быть шагом в правильном направлении. Пожалуйста, уточните!

<Window x:Class="ToggleButtonSpike.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300"
    xmlns:local="clr-namespace:ToggleButtonSpike">
    <Window.Resources>
        <local:TextToBool x:Key="StringToBool"/>
    </Window.Resources>
    <StackPanel>
        <ToggleButton Name="Toggle" >
            <CheckBox IsHitTestVisible="False"
                Content="{Binding ElementName=Comment, Path=Text,
                UpdateSourceTrigger=PropertyChanged}"
                IsChecked="{Binding ElementName=Comment, Path=Text,
                Converter={StaticResource StringToBool}}"/>
        </ToggleButton>
        <Popup IsOpen="{Binding ElementName=Toggle, Path=IsChecked}"
               PlacementTarget="{Binding ElementName=Toggle}">
            <StackPanel>
                <TextBlock Foreground="White">
                    Enter  comment:
                </TextBlock>
                <TextBox Name="Comment"/>
            </StackPanel>
        </Popup>
    </StackPanel>
</Window>

using System;
using System.Windows;
using System.Windows.Data;


namespace ToggleButtonSpike
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }
    }

    public class TextToBool : IValueConverter
    {
        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return !string.IsNullOrEmpty((string)value);
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}
1 голос
/ 08 ноября 2011

При нажатии на кнопку переключения. Это будет проверено или снято, пожалуйста, помните это. При первом нажатии на него, он будет сфокусирован. Пожалуйста, попробуйте:

<ToggleButton Focusable="False"/>

Надеюсь помочь вам

1 голос
/ 16 декабря 2009

Я полагаю, это происходит из-за того, что всплывающее окно сгибается в свойстве btnAddLinkComment.isChecked. Я полагаю, что происходит то, что вы нажимаете на кнопку, когда отображается pop, что заставляет ее закрываться и устанавливает для поля IsChecked кнопки значение false, что переводит кнопку в состояние без переключения; затем щелчок обрабатывается самой кнопкой, и поскольку он не переключается, он переключается, и всплывающее окно снова отображается. Я думаю, вы могли бы решить проблему, удалив привязку и выполнив некоторую обработку в коде; что-то вроде этого:

btnAddLinkComment.Click += btnAddLinkComment_Click;
popAddCommentLink.Closed += popAddCommentLink_Closed;

private void btnAddLinkComment_Click(object sender, RoutedEventArgs e)
{
    if (popAddCommentLink.IsOpen && btnAddLinkComment.IsChecked == false)
        popAddCommentLink.IsOpen = false;
    else if (!popAddCommentLink.IsOpen && btnAddLinkComment.IsChecked == true)
        popAddCommentLink.IsOpen = true;
}

private void popAddCommentLink_Closed(object sender, EventArgs e)
{
    btnAddLinkComment.IsChecked = false;
}

надеюсь, это поможет, с уважением

...