2

私は iOS 開発者で、現在 .net Windows 8 ストア アプリケーションの開発に取り組んでいます。さて、私はこの問題を抱えています:私はそのようなXAMLでグループ化されたlistViewを作成しました:

<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 事前定義型 'Microsoft.CSharp.RuntimeBinder.Binder' が定義されていないか、輸入

これはイタリア語からの英訳です (私のアイデアはイタリア語です)。

参照->参照の追加->アセンブリ->フレームワークに移動すると、フレームワークへのすべての参照が既にあり、フレームワーク内の参照を調べるには「オブジェクトビューアー」を使用する必要があるというメッセージしか表示されません.. .

私はそれが何を意味するのか分かりません...

4

2 に答える 2

0

これをしないでください。コードから UI 要素を変更しないでください。むしろそれらをデータバインドします。コンバーターを使用してボタンをトリガーできます。ボタン自体を新しい bool プロパティ (Selected) にデータバインドし、コンバーターに接続します。

<Button BackGroud="{Bind Selected, Converter={StaticResource selectedToBrushConverter}}" />

インターネット上でコンバーターを使用する方法に関する記事はたくさんあります。

ボタンのスタイルをリソース キーに設定することもできます。次に、Triggers を GotFocus および LostFocus プロパティに定義できます。gotfocus では色をある色に設定し、lostfocus では別の色に設定します。

これは、すべてのボタンに適用できるテンプレートの 1 つです。特定のキーを設定し、ボタンをスタイラにバインドできます。

<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>

この方法では、イベント処理を行う必要はありません;)

于 2013-10-15T09:16:34.340 に答える