我是iOS开发人员,现在我正在接近.net windows 8商店应用程序开发。 好吧,我有这个问题:我用XAML创建了一个分组列表视图:
<ListView Margin="0,10,50,50"
x:Name="listView"
AutomationProperties.AutomationId="listView"
AutomationProperties.Name="Grouped Items"
Grid.Row="1"
Background="LightGray"
BorderBrush="#FF818181"
ItemsSource="{Binding Source={StaticResource groupedIndexViewSource}}"
ItemTemplate="{StaticResource StandardSubIndexNOIcon320x70ItemTemplate}"
BorderThickness="0,1,1,1"
SelectionMode="None"
IsSwipeEnabled="false"
IsItemClickEnabled="True"
ItemClick="itemClicked">
<ListView.GroupStyle>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid x:Name="Prr"
Width="315"
Margin="-5,0,0,2"
Height="70"
Background="#FFB9B9B9">
<Button Width="315"
Height="70"
Margin="0"
Click="HeaderClicked"
BorderThickness="0"
BorderBrush="{x:Null}"
Foreground="{x:Null}"
Background="{x:Null}"
Padding="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="260" />
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Width="250"
Margin="10,0,0,0"
Text="{Binding Title}"
Style="{StaticResource BodyTextStyle}"
TextWrapping="NoWrap"
FontSize="20"
Foreground="#DE000000"
VerticalAlignment="Center"
TextAlignment="Left"
HorizontalAlignment="Left" />
</Grid>
</Button>
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</ListView.GroupStyle>
</ListView>
现在,我想更改headerTemplate中定义的标题按钮的背景颜色,因此,在我的c#代码中我定义了这个方法:
private void HeaderClicked(object sender, RoutedEventArgs e)
{
((Grid)((Button)e.OriginalSource).Parent).Background = new SolidColorBrush(Colors.DarkBlue);
}
问题是这条指令只是被忽略了。
你能帮我解决这个问题吗?
提前致谢。
更新
在DanM的帮助下,我发现我确实在这个属性上遇到了问题: ((Grid)((Button)e.OriginalSource)。Parent).Background predefinite type'Microsoft.CSharp.RuntimeBinder.Binder'未定义或导入
这是来自意大利语的英语翻译(我的意思是意大利语)。
当我进入参考文献 - >添加reference-&gt; assembly-&gt;框架时,我只能看到一条消息,说我已经对框架进行了所有引用,并且我需要使用“对象查看器”来探索框架中的参考资料......
我不确定这意味着什么...
答案 0 :(得分:1)
唯一突然出现的问题是,或许你应该使用Transparent
而不是x:Null
作为你的Button画笔。
因此,您的按钮标记将变为:
<Button Width="315"
Height="70"
Margin="0"
Click="HeaderClicked"
BorderThickness="0"
BorderBrush="Transparent"
Foreground="Transparent"
Background="Transparent"
Padding="0">
如果这确实有效,那将是因为具有透明背景的按钮仍然接受单击事件,而具有空背景的按钮可能不会。
答案 1 :(得分:0)
不要这样做。不要从代码中更改UI元素。而是数据绑定他们。您可以使用转换器来触发按钮。将按钮本身数据绑定到新的bool属性(Selected),并连接到转换器。
<Button BackGroud="{Bind Selected, Converter={StaticResource selectedToBrushConverter}}" />
有很多文章介绍如何在互联网上使用转换器。
您可以做的另一件事是将按钮的样式设置为资源键。然后,您可以将触发器定义为GotFocus和LostFocus属性。在gotfocus上将颜色设置为一种颜色,将丢失的焦点设置为另一种颜色。
这是我允许应用于所有按钮的模板之一。您可以设置特定键,并将按钮绑定到styla。
<Style TargetType="{x:Type Button}">
<Setter Property="Margin" Value ="1" />
<Setter Property="Background" Value="Gray" />
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="Foreground" Value="White" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="White" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}" >
<Border Background="{TemplateBinding Background}" Opacity="{TemplateBinding Opacity}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="3">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="3"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="DarkOrange" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="White" />
<Setter Property="Foreground" Value="Gray" />
<Setter Property="Opacity" Value="0.95" />
<!--<Setter Property="BorderThickness" Value="2" />-->
</Trigger>
<Trigger Property="IsFocused" Value="True">
<Setter Property="Background" Value="#82A3FF" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="DarkGray" />
</Trigger>
</Style.Triggers>
</Style>
这样你就不需要做任何事件处理;)