WPF中LABEL文本不及时更新的问题,求指导
在学习WPF的时候发现Label的Content在程序运行中改变时不在窗体上立即更新,而总是只显示最后一次赋值结果。用了几种方法都是这样,求大神指导。以下为我的代码。
第一种:
前台:
<Window x:Class="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 Name="grid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="249*" />
<ColumnDefinition Width="254*" />
</Grid.ColumnDefinitions>
<Label Name="state" Margin="0,0,0,247" Grid.ColumnSpan="2" Content="{Binding Path=Textstring,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Background="Brown"/>
<Button Grid.ColumnSpan="2" Height="43" VerticalAlignment="Bottom" Margin="142,0,150,168" Name="Button1">运行</Button>
</Grid>
</Window>
后台:
Imports System.Threading
Imports System.ComponentModel
Imports System.Windows.Threading
Class MainWindow
Partial Class TextState
Implements INotifyPropertyChanged
Private _Textstring As String
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Property Textstring As String
Get
Return _Textstring
End Get
Set(ByVal value As String)
_Textstring = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Textstring"))
End Set
End Property
End Class
Public mystring As String
Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
mystring = "正在进行计算,请稍后"
Dim TextState1 As New TextState
state.DataContext = TextState1
TextState1.Textstring = mystring
For i = 0 To 2
TextState1.Textstring = i
Next
End Sub
End Class
第二种:
前台
<Window x:Class="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 Name="grid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="249*" />
<ColumnDefinition Width="254*" />
</Grid.ColumnDefinitions>
<Label Name="state" Margin="0,0,0,248" Grid.ColumnSpan="2" Background="Brown"/>
<Button Grid.ColumnSpan="2" Height="37" VerticalAlignment="Bottom" Margin="165,0,179,170" Name="Button1">运行</Button>
</Grid>
</Window>
后台:
Imports System.Threading
Imports System.ComponentModel
Imports System.Windows.Threading
Class MainWindow
Public mystring As String
Private Delegate Sub MyDelegate(mystring As String)
Private Sub ThreadMethod()
If state.Dispatcher.CheckAccess() Then
Settext(mystring)
Else
Dim myDelegate As MyDelegate = New MyDelegate(AddressOf Settext)
state.Dispatcher.BeginInvoke(DispatcherPriority.Send, myDelegate, mystring)
End If
End Sub
Private Sub Settext(mystring As String)
state.Content = mystring
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
Dim myThread As Thread = New Thread(AddressOf ThreadMethod)
myThread.IsBackground = True
mystring = "正在进行计算,请稍后"
myThread.Start()
For i = 0 To 2
mystring = i
Next
End Sub
End Class
第一种:
前台:
<Window x:Class="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 Name="grid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="249*" />
<ColumnDefinition Width="254*" />
</Grid.ColumnDefinitions>
<Label Name="state" Margin="0,0,0,247" Grid.ColumnSpan="2" Content="{Binding Path=Textstring,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Background="Brown"/>
<Button Grid.ColumnSpan="2" Height="43" VerticalAlignment="Bottom" Margin="142,0,150,168" Name="Button1">运行</Button>
</Grid>
</Window>
后台:
Imports System.Threading
Imports System.ComponentModel
Imports System.Windows.Threading
Class MainWindow
Partial Class TextState
Implements INotifyPropertyChanged
Private _Textstring As String
Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
Public Property Textstring As String
Get
Return _Textstring
End Get
Set(ByVal value As String)
_Textstring = value
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Textstring"))
End Set
End Property
End Class
Public mystring As String
Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
mystring = "正在进行计算,请稍后"
Dim TextState1 As New TextState
state.DataContext = TextState1
TextState1.Textstring = mystring
For i = 0 To 2
TextState1.Textstring = i
Next
End Sub
End Class
第二种:
前台
<Window x:Class="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 Name="grid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="249*" />
<ColumnDefinition Width="254*" />
</Grid.ColumnDefinitions>
<Label Name="state" Margin="0,0,0,248" Grid.ColumnSpan="2" Background="Brown"/>
<Button Grid.ColumnSpan="2" Height="37" VerticalAlignment="Bottom" Margin="165,0,179,170" Name="Button1">运行</Button>
</Grid>
</Window>
后台:
Imports System.Threading
Imports System.ComponentModel
Imports System.Windows.Threading
Class MainWindow
Public mystring As String
Private Delegate Sub MyDelegate(mystring As String)
Private Sub ThreadMethod()
If state.Dispatcher.CheckAccess() Then
Settext(mystring)
Else
Dim myDelegate As MyDelegate = New MyDelegate(AddressOf Settext)
state.Dispatcher.BeginInvoke(DispatcherPriority.Send, myDelegate, mystring)
End If
End Sub
Private Sub Settext(mystring As String)
state.Content = mystring
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
Dim myThread As Thread = New Thread(AddressOf ThreadMethod)
myThread.IsBackground = True
mystring = "正在进行计算,请稍后"
myThread.Start()
For i = 0 To 2
mystring = i
Next
End Sub
End Class
...全文
相关推荐
WPF单行文本两端对齐
WPF是不支持单行文本的两端对齐的,于是自己写了一个控件。有兴趣的朋友可以下载了解一下我的设计原理。
WPF Label文字竖排 字间距控制
WPF文本控件Label文字竖排及字间距控制。
wpf在一定区域内循环滚动文字
利用计时器timer控制label移动,达到在窗口的一个限制区域内文字的循环滚动
wpf通过代码动态生成Label并通过popupcoloredit修改颜色.rar
我的一个WPF项目上有个功能: 需要用到动态生成Label并为其添加事件响应函数, 同时需要用到PopupColorEdit修改Label的颜色。 在此记录一下
wpf通过代码动态生成Label并通过ColorDialog修改颜色.zip
WPF工程,通过代码动态生成Label,并且label的位置根据界面的大小来确定,个数根据用户输入的个数来确定。 同时双击label之后会跳出ColorDialog界面,通过的ColorDialog中选中的颜色来修改label中的颜色


