编辑:我找到了一个重现问题的最简单方法。开始在Visual Studio中的一个新的Windows Phone应用程序模板,并将其加入到您的MainPage.xaml
:Windows Phone:在C#中应用XAML样式'重置'本身
<Page.Resources>
<Style x:Name="TileStyle" TargetType="Button">
<Setter Property="BorderThickness" Value="0,0,0,0" />
</Style>
</Page.Resources>
<Button x:Name="btn" Style="{StaticResource TileStyle}" />
,并给你的代码隐藏文件(在OnNavigatedTo
事件处理程序):
btn.Style = TileStyle;
重现问题当您导航到页面时。
原始文本:我正在尝试创建一个Windows Phone应用程序,它是Whack-A-Mole的最小版本。在我的游戏页面上,我有两种用XAML编写的按钮样式,代表一个洞被占用或未被占用。
<Page.Resources>
<Style x:Name="TileStyle" TargetType="Button">
<Setter Property="BorderThickness" Value="0,0,0,0" />
<Setter Property="Width" Value="125"/>
<Setter Property="Height" Value="125" />
</Style>
<Style x:Name="CircleStyle" TargetType="Button"
BasedOn="{StaticResource TileStyle}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Rectangle Fill="{TemplateBinding Background}" />
<Image Source="/Assets/white_circle.png" />
<ContentPresenter HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Page.Resources>
<!--later on...-->
<Grid>
<Button Style="{StaticResource TileStyle}" Click="Button_Click"/>
<Button Style="{StaticResource TileStyle}" Click="Button_Click"/>
<Button Style="{StaticResource TileStyle}" Click="Button_Click"/>
...
</Grid>
第一种风格基本上只是一个空白的黑色125x125平方米;你只能通过点击它来告诉它。第二种风格是BasedOn,它显示white_circle.png代替空白方块。在我的代码隐藏的C#文件中,我有两种使用这些样式的方法:一种是在页面加载时调用,另一种在单击按钮时调用。
protected async void OnNavigatedTo(NavigationEventArgs e)
while (!hasUserWonGame)
//sleeps for 1-3 secs
//decides where circle should go at by generating random int
b.Style = CircleStyle; //this works fine!
//more logic, waits
if (!hasUserWonRound)
b.Style = TileStyle; //reverts to TileStyle (this does not work!)
private void Button_Click(object sender, RoutedEventArgs e)
//decides if user is clicking on a circle
if (areTilesDisplayingCircle[index - 1])
//user has won the round!
hasUserWonRound = true;
b.Style = TileStyle; //this also does not work!
//more logic, updates score, decides if user has won the entire game
当用户第一次导航到页面时,这些按钮都是黑色的,并且它们应该是不可见的。白色圆圈按预期出现在空间中。但是,当它从现场消失时,圆形会留下未应用任何样式的按钮。 (见图片)。
您应该也可以在'TileStyle'中为'Template'属性设置一个Setter。 – Clemens 2015-02-09 08:25:35
其实,你没有附加任何图像到你的文章。就实际问题而言,您需要发布[a _minimal_,_complete_代码示例](http://stackoverflow.com/help/mcve)。我根据你发布的内容写了一个简单的例子,它对我来说工作得很好。我只需设置一个计时器,通过按钮循环,每次设置一个具有'CircleStyle'风格,并将之前设置的一个设置回''TileStyle'',而不是处理鼠标点击。即使重新设置为“TileStyle”,该按钮仍保持空白,并且看起来不像普通按钮。 – 2015-02-09 09:46:03
你能告诉我们你的'TileStyle'属性的代码吗? – 2015-02-09 14:52:10