为什么我的文本框加载的文本消失了 [英] Why is my textbox loaded text disappearing

查看:45
本文介绍了为什么我的文本框加载的文本消失了的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个文本框ACLBox,我想在用户界面初始化时显示一个字符串.初始化后,字符串闪烁一秒钟,然后消失.为什么?

I have a textbox ACLBox that I want to display a string upon initialization of the user interface. Upon initializing, the string flashes for a second then disappears. Why?

这是文本框的xaml代码:

Here's the xaml code for the textbox:

     <Window x:Class="Funnel.ACL"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:Funnel"
    mc:Ignorable="d"
    Title="ACL Configuration" Height="300" Width="560" WindowStartupLocation="CenterScreen"
    Closing="exitACL"
    Background="LightGray" Name="ACLConfiguration">

<Grid>
    <DockPanel>
        <Grid x:Name="FunnelGrid" DockPanel.Dock="Top" ShowGridLines="False">

            <!--Defining Grid-->
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="130"/>
                <ColumnDefinition Width="40"/>
                <ColumnDefinition Width="40"/>
                <ColumnDefinition Width="40"/>
                <ColumnDefinition Width="40"/>
                <ColumnDefinition Width="30"/>
                <ColumnDefinition Width="70"/>
                <ColumnDefinition Width="75"/>
                <ColumnDefinition Width="75"/>
                <ColumnDefinition Width="75"/>

            </Grid.ColumnDefinitions>

            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>

            <Label x:Name="Config" 
                   Content="ACL CONFIGURATION" 
                   Grid.Row="0" 
                   Grid.Column="0" 
                   Grid.ColumnSpan="9" 
                   HorizontalAlignment="Center"
                   Foreground="Blue"
                   FontWeight="Heavy"
                   FontSize="16">
            </Label>
            <CheckBox x:Name="aclCheckbox" 
                      FlowDirection="RightToLeft"
                      Content="ACL ON"
                      Foreground="Blue"
                      FontWeight="Heavy"
                      FontSize="16"
                      Grid.Row="1"
                      Grid.Column="0"
                      Grid.RowSpan="1"
                      Grid.ColumnSpan="5"
                      HorizontalAlignment="Center"
                      Checked="ACL_Check"
                      Unchecked="ACL_Unchecked"
                      />

            <Label x:Name="AddIPAddress" Content="Add IP Address" Grid.Row="2" Grid.Column="0" Width="90" Height="30"></Label>
            <TextBox x:Name="AddIPTextBox1" Grid.Row="2" Grid.Column="1" Width="35" Height="20" TextChanged="AddIPTextBox1_TextChanged"></TextBox>
            <TextBox x:Name="AddIPTextBox2" Grid.Row="2" Grid.Column="2" Width="35" Height="20" TextChanged="AddIPTextBox2_TextChanged"></TextBox>
            <TextBox x:Name="AddIPTextBox3" Grid.Row="2" Grid.Column="3" Width="35" Height="20" TextChanged="AddIPTextBox3_TextChanged"></TextBox>
            <TextBox x:Name="AddIPTextBox4" Grid.Row="2" Grid.Column="4" Width="35" Height="20" TextChanged="AddIPTextBox4_TextChanged"></TextBox>
            <TextBox x:Name="AddErrorBox" Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Right" BorderThickness="0" Background="LightGray" FontSize="10" Text="{Binding AddErrorText}"/>
            <Button x:Name="AddButton" Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="4" HorizontalAlignment="Center" Height="25" Width="50" Click="addClick" FontSize="12" FontWeight="ExtraBold" Background="LightSteelBlue"  VerticalAlignment="Top">ADD</Button>

            <Label x:Name="DelIPAddress" Content="Remove IP Address" Grid.Row="4" Grid.Column="0" Width="120" Height="30"></Label>
            <TextBox x:Name="DeleteIPTextBox1" Grid.Row="4" Grid.Column="1" Width="35" Height="20" TextChanged="DeleteIPTextBox1_TextChanged"></TextBox>
            <TextBox x:Name="DeleteIPTextBox2" Grid.Row="4" Grid.Column="2" Width="35" Height="20" TextChanged="DeleteIPTextBox2_TextChanged"></TextBox>
            <TextBox x:Name="DeleteIPTextBox3" Grid.Row="4" Grid.Column="3" Width="35" Height="20" TextChanged="DeleteIPTextBox3_TextChanged"></TextBox>
            <TextBox x:Name="DeleteIPTextBox4" Grid.Row="4" Grid.Column="4" Width="35" Height="20" TextChanged="DeleteIPTextBox4_TextChanged"></TextBox>
            <TextBox x:Name="DelErrorBox" Grid.Row="5" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Right" BorderThickness="0" Background="LightGray" FontSize="10" Text="{Binding DelErrorText}"/>
            <Button x:Name="DeleteButton" Grid.Row="5" Grid.Column="1" Grid.ColumnSpan="4" HorizontalAlignment="Center" Height="25" Width="50" Click="deleteClick" FontSize="12" FontWeight="ExtraBold" Background="LightSteelBlue"  VerticalAlignment="Top">DELETE</Button>
            <Button x:Name="DeleteAllButton" Grid.Row="6" Grid.Column="1" Grid.ColumnSpan="4" HorizontalAlignment="Center" Height="25" Width="80" Click="deleteAllClick" FontSize="12" FontWeight="ExtraBold" Background="LightSteelBlue"  VerticalAlignment="Top">REMOVE ALL</Button>

            <Label x:Name="ACLBoxLabel" Content="Access Control List" Foreground="Blue" Grid.Row="1" Grid.Column="6" Grid.ColumnSpan="3" HorizontalAlignment="Center"></Label>

            <TextBox x:Name="ACLBox"
                 ScrollViewer.HorizontalScrollBarVisibility="Auto"
                 ScrollViewer.VerticalScrollBarVisibility="Auto"
                 ScrollViewer.CanContentScroll="True"
                 Grid.Row="2"
                 Grid.Column="6"
                 Grid.RowSpan="4"
                 Grid.ColumnSpan="4"
                 HorizontalAlignment="Left" 
                 VerticalAlignment="Center"
                 Width="220" 
                 Height="150"
                 FontSize="14"
                 IsReadOnly="True"
                 Text="{Binding ACLBoxText}"
                 TextWrapping="Wrap"
                 TextAlignment="Center" /> 
        </Grid>
    </DockPanel>
</Grid>

这是字符串的C#代码:

Here's the C# code for the string:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace Funnel
{
     /// <summary>
     /// Interaction logic for ACL.xaml
     /// </summary>
     public partial class ACL : Window
     {
         AclManager _manage = new AclManager();
         FileController _controller = new FileController();
         string addStr1;
         string addStr2;
         string addStr3;
         string addStr4;
         bool addError;
    string delStr1;
    string delStr2;
    string delStr3;
    string delStr4;
    bool delError;
    public string aclText;
    public event PropertyChangedEventHandler PropertyChanged;

    public ACL()
    {
        InitializeComponent();

        if(FunnelGlobals.accessControlList)
        {
            aclCheckbox.IsChecked = true;
        }

        aclText = _manage.getAclList();
    }

    private void exitACL(object sender,System.ComponentModel.CancelEventArgs e)
    {
        _controller.writeAclFile();
    }

    private void ACL_Check(object sender, RoutedEventArgs e)
    {
        FunnelGlobals.accessControlList = true;
        aclText = _manage.getAclList();
    }

    private void ACL_Unchecked(object sender, RoutedEventArgs e)
    {
        FunnelGlobals.accessControlList = false;
        aclText = _manage.getAclList();
    }

    private void AddIPTextBox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        AddErrorBox.Text = "";
        AddIPTextBox1.Text = AddIPTextBox1.Text;
        addStr1 = AddIPTextBox1.Text;
        if(!_manage.isDigit(addStr1))
        {
            Color foreColor = (Color)new ColorConverter().ConvertFrom("red");
            Brush errBrush = new SolidColorBrush(foreColor);
            AddErrorBox.Foreground = errBrush;
            AddErrorBox.Text = "Character NOT Valid";
            addError = true;
        }
       else
        {
            addError = false;
        }
        ACLBox.Text = _manage.getAclList();
    }
    private void AddIPTextBox2_TextChanged(object sender, TextChangedEventArgs e)
    {
        AddErrorBox.Text = "";
        AddIPTextBox2.Text = AddIPTextBox2.Text;
        addStr2 = AddIPTextBox2.Text;
        if (!_manage.isDigit(addStr2))
        {
            Color foreColor = (Color)new ColorConverter().ConvertFrom("red");
            Brush errBrush = new SolidColorBrush(foreColor);
            AddErrorBox.Foreground = errBrush;
            AddErrorBox.Text = "Character NOT Valid";
        }
        aclText = _manage.getAclList();
    }
    private void AddIPTextBox3_TextChanged(object sender, TextChangedEventArgs e)
    {
        AddErrorBox.Text = "";
        AddIPTextBox3.Text = AddIPTextBox3.Text;
        addStr3 = AddIPTextBox3.Text;
        if (!_manage.isDigit(addStr3))
        {
            Color foreColor = (Color)new ColorConverter().ConvertFrom("red");
            Brush errBrush = new SolidColorBrush(foreColor);
            AddErrorBox.Foreground = errBrush;
            AddErrorBox.Text = "Character NOT Valid";
        }
        aclText = _manage.getAclList();
    }
    private void AddIPTextBox4_TextChanged(object sender, TextChangedEventArgs e)
    {
        AddErrorBox.Text = "";
        AddIPTextBox4.Text = AddIPTextBox4.Text;
        addStr4 = AddIPTextBox4.Text;
        if (!_manage.isDigit(addStr4))
        {
            Color foreColor = (Color)new ColorConverter().ConvertFrom("red");
            Brush errBrush = new SolidColorBrush(foreColor);
            AddErrorBox.Foreground = errBrush;
            AddErrorBox.Text = "Character NOT Valid";
        }
        aclText = _manage.getAclList();
    }
    private void addClick(object sender, RoutedEventArgs e)
    {
        String addStr = addStr1 + "." + addStr2 + "." + addStr3 + "." + addStr4;
        if(_manage.isLegit(addStr))
        {
            FunnelGlobals.aclIPs.Add(addStr);
        }
        if(addError)
        {
            Color foreColor = (Color)new ColorConverter().ConvertFrom("red");
            Brush errBrush = new SolidColorBrush(foreColor);
            AddErrorBox.Foreground = errBrush;
            AddErrorBox.Text = "Fix Invalid Characters before Adding";
        }
        else
        {
            aclText = _manage.getAclList();
        }

    }

    private void DeleteIPTextBox1_TextChanged(object sender, TextChangedEventArgs e)
    {
        DelErrorBox.Text = "";
        DeleteIPTextBox1.Text = DeleteIPTextBox1.Text;
        delStr1 = DeleteIPTextBox1.Text;
        if (!_manage.isDigit(delStr1))
        {
            Color foreColor = (Color)new ColorConverter().ConvertFrom("red");
            Brush errBrush = new SolidColorBrush(foreColor);
            DelErrorBox.Foreground = errBrush;
            DelErrorBox.Text = "Character NOT Valid";
            delError = true;
        }
        else
        {
            delError = false;
        }
    }

    private void DeleteIPTextBox2_TextChanged(object sender, TextChangedEventArgs e)
    {
        DelErrorBox.Text = "";
        DeleteIPTextBox2.Text = DeleteIPTextBox2.Text;
        delStr2 = DeleteIPTextBox2.Text;
        if (!_manage.isDigit(delStr2))
        {
            Color foreColor = (Color)new ColorConverter().ConvertFrom("red");
            Brush errBrush = new SolidColorBrush(foreColor);
            DelErrorBox.Foreground = errBrush;
            DelErrorBox.Text = "Character NOT Valid";
            delError = true;
        }
        else
        {
            delError = false;
        }
    }

    private void DeleteIPTextBox3_TextChanged(object sender, TextChangedEventArgs e)
    {
        DelErrorBox.Text = "";
        DeleteIPTextBox3.Text = DeleteIPTextBox3.Text;
        delStr3 = DeleteIPTextBox3.Text;
        if (!_manage.isDigit(delStr3))
        {
            Color foreColor = (Color)new ColorConverter().ConvertFrom("red");
            Brush errBrush = new SolidColorBrush(foreColor);
            DelErrorBox.Foreground = errBrush;
            DelErrorBox.Text = "Character NOT Valid";
            delError = true;
        }
        else
        {
            delError = false;
        }
    }

    private void DeleteIPTextBox4_TextChanged(object sender, TextChangedEventArgs e)
    {
        DelErrorBox.Text = "";
        DeleteIPTextBox4.Text = DeleteIPTextBox4.Text;
        delStr4 = DeleteIPTextBox4.Text;
        if (!_manage.isDigit(delStr4))
        {
            Color foreColor = (Color)new ColorConverter().ConvertFrom("red");
            Brush errBrush = new SolidColorBrush(foreColor);
            DelErrorBox.Foreground = errBrush;
            DelErrorBox.Text = "Character NOT Valid";
            delError = true;
        }
        else
        {
            delError = false;
        }
    }

    private void deleteClick(object sender, RoutedEventArgs e)
    {
        String delStr = delStr1 + "." + delStr2 + "." + delStr3 + "." + delStr4;
        FunnelGlobals.aclIPs.Remove(delStr);

        if (delError)
        {
            Color foreColor = (Color)new ColorConverter().ConvertFrom("red");
            Brush errBrush = new SolidColorBrush(foreColor);
            DelErrorBox.Foreground = errBrush;
            DelErrorBox.Text = "Fix Invalid Characters before Removing";
        }
        else
        {
            aclText = _manage.getAclList();  
        }
    }

    private void deleteAllClick(object sender, RoutedEventArgs e)
    {
        FunnelGlobals.aclIPs.Clear();
        aclText = _manage.getAclList();
    }

    private void ACLBox_Loaded(object sender, RoutedEventArgs e)
    {
      ACLBox.Text = _manage.getAclList();
    }
    public string ACLBoxText
    {
        get { return aclText; }
        set { aclText = value; OnNotifyPropertyChanged("ACLBoxText"); }
    }

    private void OnNotifyPropertyChanged(string v)
    {
        var handler = PropertyChanged;

        if (handler != null)
            handler(this, new PropertyChangedEventArgs(v));
        throw new NotImplementedException();
    }
}

}

推荐答案

如Ed Plunkett所述,您应该使用 ACLBoxText 支持变量,而不是重置控制值.

As Ed Plunkett has already mentioned, you should use your ACLBoxText backing variable instead of resetting the control value.

类似的事情会起作用:

private void ACLBox_Loaded(object sender, RoutedEventArgs e)
{
     ACLBoxText = _manage.getAclList();
}

不幸的是,除非您告诉它更改了某些内容,否则该视图不知道后备属性的更改.您需要实现 INotifyPropertyChanged :

Unfortunately, the view doesn't know about changes to backing properties unless you tell it that something changed. You need to implement INotifyPropertyChanged:

private string _aclBoxText;

public string ACLBoxText {
    get { return _aclBoxText; }
    set {
        _aclBoxText = value;
        OnNotifyPropertyChanged("ACLBoxText");
    }
}

protected void OnNotifyPropertyChanged(string name)
{
    var handler = PropertyChanged;

    if (handler != null)
        handler(this, new PropertyChangedEventArgs(name));
}

public event PropertyChangedEventHandler PropertyChanged;

这篇关于为什么我的文本框加载的文本消失了的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆