WP7 Silverlight 中自己实现一个类似StatusBar类遇到的问题
需求:
我实现一个批量图片拷贝的函数时,希望是在page的下方能够实现一个statusbar来显示当前拷贝的文件的名称
为了以后能用在别的地方,我单独实现了一个 StatusBarControl的控件
这个控件主要由一个TextBlock组成,我企图通过设置他的Text属性来更新显示的消息。
问题来了:
我在拷贝文件的循环里面(从系统medialib拷贝到isolatedStorage里面) 在拷贝之前,调用statusbar.ShowMessage(message), 可是这不能导致负责现实消息的TextBlock得到刷新, message根本显示不出来。 不管是否进行了拷贝,都显示不出来。
可能我对c#绘图的机制不了解,开始想找些强制刷新TextBlock的方法,可是没有,后来什么依赖属性都用上了还是不行,还是请高手给参谋一下
为了避免混乱我把主要代码贴再后面。
// 下面是 StatusBar xaml主要内容
<Grid x:Name= "LayoutRoot ">
<Grid.ColumnDefinitions>
<ColumnDefinition Width= "* " />
</Grid.ColumnDefinitions>
<Border Name= "frameBorder "
BorderThickness= "1 "
BorderBrush= "{StaticResource PhoneAccentBrush} "
HorizontalAlignment= "Stretch ">
<TextBlock Name= "messageTextBlock " />
</Border>
</Grid >
//下面是 StatusBar code-behinded 主要内容
public partial class StatusBarControl : UserControl
{
private DispatcherTimer clearTimer;
public Thickness FrameBorderThickness
{
... //省略
}
public double MessageFontSize
{
... //省略
}
public StatusBarControl()
{
clearTimer = new DispatcherTimer();
InitializeComponent();
}
public void ClearMessage()
{
... //省略
}
public void ShowMessage(string message)
{
if (messageTextBlock.Text != message)
{
Debug.WriteLine( "Wrintg message .... {0} ",message);
messageTextBlock.Text = message;
}
}
}
//最后是 调用StatusBar ShowMessage处的代码片断
foreach (Picture iterPicture in (srcList.SelectedItem as PictureAlbum).Pictures)
{
srcPictureIndex++;
//就是下面这行设置textblock属性是成功了,可是根本显示不出来,即便拷贝没有真的进行(空循环),也show不出来
statusBar.ShowMessage(String.Format( "Copying #{0} <{1}> ", srcPictureIndex, iterPicture.Name));
string filepath = "MyPictureRoot " + "/ " + (dstList.SelectedItem as string) + "/ " + iterPicture.Name;
if (myIsolatedStorage.FileExists(filepath))
{
if (samenameOptions.CurrentSelectionIndex == (int) SameNameOption.Skip)
{
continue;
}
else if (samenameOptions.CurrentSelectionIndex == (int) SameNameOption.Rename)
{
filepath += "renamed ";
}
else if (samenameOptions.CurrentSelectionIndex == (int) SameNameOption.OverWrite)
{
myIsolatedStorage.DeleteFile(filepath);
}
}
IsolatedStorageFileStream fileStream = myIsolatedStorage.CreateFile(filepath);
bitmap.SetSource(iterPicture.GetImage());
WriteableBitmap wb = new WriteableBitmap(bitmap);
Extensions.SaveJpeg(wb, fileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);
fileStream.Close();
copied++;
}
[解决办法]
StatusBarControl是USERCONTROL,那没见你把MESSAGETEXTBOX,ADD到这个CONTAINER里去啊?