问题二十一:我在一个线程中调用如下代码,但是当到了 BitmapImage Coverbmp = new BitmapImage();就报Invalid cross-thread access错误,但是我想在后台慢慢加载独立信息里的图片,做为缓冲图,这怎么办呢?
答案:Dispatcher.BeginInvoke
问题二十二:今天在全景视图中定义了一个ListBox,并且写了这个ListBox的SelectionChanged。
在SelectionChanged事件函数中仅写了一个NavigationService的页面跳转。当我第一次选择一个ListBox中的Item时页面可以正常跳转。
可是当我从跳转后的页面回到主页面时会自动再次触发SelectionChanged事件,并且选中的SelectedIndex为0xffffff(全是f,几位我记不清了)然后我重写了跳转后页面的BackKeyPress,用NavigationService直接跳转至主页面,这个时候没有问题。请问这是什么原因呢?有朋友有类似情况么?
答案:BackKeyPress 和行为机制好像不能重写,这是系统功能。如果这个可以重写,那就有可能造成用户点击返回不能退出程序,这样就成流氓软件了。
标准用法如下:
// If selected index is -1 (no selection) do nothing
if (apps.SelectedIndex == -1)
return;
// Navigate to the Application Details Page
// Reset selected index to -1 (no selection)
apps.SelectedIndex = -1;
问题二十三:Panorama全景视图控件里放置一张图片,点击图片跳转到另一个页面,问题是如何判断点击在图片上的一个滑动动作,是一个滑动事件,而不是点击事件。
答案:在全景视图页上,按钮上的滑动不会触发Click事件,可以放心的在Click事件中导航,无需判断。
或者直接用HyperLinkButton也行。
在按钮或HyperLinkButton中嵌入你的图片。
2. <Image .... />
3. </HyperlinkButton>
问题二十四:模拟器都看不一个文件,也找不到相应的文章。
答案:1. 你的程序只能看到自己的独立存储里面的文件
2. 通过http协议和你的服务器通讯传递文件
问题二十五:如果用wp7拍照或摄像,那么这些资源都存放在什么地方呢?如何用代码访问到这些空间呢?
答案:默认放在MediaLibrary中,一般可以通过MediaLibrary类访问,图片还可以通过PhotoChooserTask访问。
MediaLibrary library = new MediaLibrary();
问题二十六:默认状态下,点击ListBox的某项文字行后,选中行的颜色会自动变成蓝色(选中状态),现在我想改变选中状态的颜色,不知道能不能通过样式来改。
答案:
<Border x:Name="RootElement">
<VisualStateManager.VisualStateGroups>
<!--Define the states for the common states.
The states in the VisualStateGroup are mutually exclusive to
each other.-->
<VisualStateGroup x:Name="CommonStates">
<!--The Normal state is the state the button is in
when it is not in another state from this VisualStateGroup.-->
<VisualState x:Name="Normal" />
<!--Change the SolidColorBrush, BorderBrush, to red when the
mouse is over the button.-->
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimation Storyboard.TargetName="BorderBrush"
Storyboard.TargetProperty="Color" To="Red" />
</Storyboard>
</VisualState>
<!--Change the SolidColorBrush, BorderBrush, to Transparent when the
button is pressed.-->
<VisualState x:Name="Pressed">
<Storyboard >
<ColorAnimation Storyboard.TargetName="BorderBrush"
Storyboard.TargetProperty="Color" To="Transparent"/>
</Storyboard>
</VisualState>
<!--The Disabled state is omitted for brevity.-->
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Border.Background>
<SolidColorBrush x:Name="BorderBrush" Color="Black"/>
</Border.Background>
<Grid Background="{TemplateBinding Background}" Margin="4">
<ContentPresenter
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
Margin="4,5,4,4" />
</Grid>
</Border>
</ControlTemplate>
问题二十七:在一个Page中加入了一个ListBox并且设置了ItemTemplate,ItemTemplate中只有一个TextBlock。之后我再后台Loaded函数中写入“AlbumListContent.ItemsSource = list;”AlbumListContent为ListBox的Name,list为ObservableCollection对象。
之后将ListBox中的TextBlock的Text属性进行绑定 Text="{Binding TAlbumInfo.albumCover}"可是最后到界面上没有任何反应啊,list里面是有数据的啊,这个是为什么?
答案:是不是没有设置数据上下文。
在PageLoad的时候,把数据集合赋给控件DataContext 属性,如下面的:
{
PivotArticle.DataContext = App.objMagInfo.ArticleInfos;
}
=============================
UI:
<!--Pivot Control-->
<controls ivot x:Name=" ivotArticle" Title="{Binding Source={StaticResource AppName}}" ItemsSource="{Binding}" TabNavigation="Cycle">
<controls ivot.ItemTemplate>
<DataTemplate>
<StackPanel >
<ScrollViewer Margin="0,0,0,0" Name="scrollViewerArticleContent" HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" HorizontalAlignment="Stretch" Height="700">
<StackPanel>
<Image Name="imgArticleImage" Source="{Binding ArticlePicName}" Stretch="Fill" Width="450" />
<TextBlock Name="txtArticleContent" Text="{Binding ArticleContnet}" TextWrapping="Wrap" FontSize="25" FontFamily="Segoe WP" />
</StackPanel>
</ScrollViewer>
</StackPanel>
</DataTemplate>
</controlsivot.ItemTemplate>
<controlsivot.HeaderTemplate>
<DataTemplate>
<Grid/>
</DataTemplate>
</controlsivot.HeaderTemplate>
</controlsivot>
问题二十八:PanoramaItem控件的不同PivotItem,如何添加不同的ApplicationBar
答案:在Pivot_SelectionChanged事件里控制。
问题二十九:想在wp7里用XElement,来创建xml树,可是包含不了system.xml.linq,是wp7不支持,还是我少添加了什么东西?如何在wp7里用代码创建xml呢?XmlWriter?
答案:WP7里面要引用LinQ需添加的引用较多,应该是你少加了引用。
2. using System.Xml;
3. using System.Xml.Linq;
当然某些情况下只需引用其中两个即可。
问题三十:
<ImageBrush ImageSource=" anoramaBackground.png"/>
</controls anorama.Background>
ImageSource 改成 bind方式 ,代码如何写?
Imagebrush xx = new imagebrush();
xx.Imagebrush = new bitmapimage怎么不行?
答案:
3. ImageBrush xx = new ImageBrush();
4. xx.ImageSource=new BitmapImage(new Uri("/Images/myPicture.png",UriKind.Relative));
5. myControl.BackGround = xx;
纠正一下:这不叫Bind,这只是一个动态更换背景的操作而已。
问题三十一:用blend创建了一个button的xaml文件,想让其他的按钮都是用这个模板。
创建步骤是:
在App.xaml文件中添加如下代码:
2. <!-- Button Style-->
3. <ResourceDictionary x:Key="BtnStyle">
4. <ResourceDictionary.MergedDictionaries>
5. <ResourceDictionary x:Name="NormalStyle" Source="/MyPhone;component/Assets/Styles/Normal_ButtonStyle.xaml"/>
6. </ResourceDictionary.MergedDictionaries>
7. </ResourceDictionary>
8. </Application.Resources>
然后再所需要这个模板的按钮中的模板属性设为
Template="{StaticResource NormalStyle}
NormalStyle 是 ControlTemplate 的key值
现在问题就来了 build的时候出现了如下的警告:
Warning The resource "NormalStyle" could not be resolved.
而且并不能所见即所得,也就是添加完代码后并不能立刻看到效果,而要等到运行的时候才能看到效果。这样很不爽有没有什么解决的办法?而且我发现只要放在之间的东西,比如system:String值,都会出现上面的情况?
答案:这个似乎无法解决。ResourceDictionary.MergedDictionaries应该是在运行时才会生成。试着直接引用你在XAML文件中定义的Style的X:Key而不是ResourceDictionary的x:Name,或许可以。
问题三十二:如何在wp7中实现tab page 和下拉框控件功能?在wp7的toolBox里好像没这些控件。
答案:Pivot控件就是用来数据和视图分类的。
Tab需要点击切换位置的类似按钮来实现,在手机上比较麻烦,而Pivot控件通过水平滑动手指就可以了。
下拉框该用什么方式代替呢?
这样可以么,弹出一个新的页面,用一个ListBox,选择之后关闭该页面,将选择的那一项的数据填回需要填写的位置。
问题三十三:
byte[] temp = BitConverter.GetBytes(a);
这时temp为byte[2]...E803
但是我用streamWriter.Write(temp);
我发现数据变成了C3A803
这时怎么回事?从两个字节变成3个字节了。
答案:改用BinaryWriter......没问题了.....