作成日: 2018/09/21 最終更新日: 2019/02/07
文書種別
不具合
状況
修正済み
詳細
フィルタのドロップダウンリストを開き、検索ボックスにリストに存在するテキストを入力して、Enterキーを押下して確定しても、フィルタリングが実行されません。
また、リストのチェックボックスを操作した後、そのままEnterキーを押下した場合も、フィルタリングが実行されません。
Enterキーではなく、OKボタンを押下した場合には、正しくフィルタリングが実行されます。
また、リストのチェックボックスを操作した後、そのままEnterキーを押下した場合も、フィルタリングが実行されません。
Enterキーではなく、OKボタンを押下した場合には、正しくフィルタリングが実行されます。
回避方法
Service Pack 2(v2.0.2019.0207)で修正済みです。
Service Pack 2(v2.0.2019.0207)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
下記ようにXAMLコードとVB/C#コードを追加して、Enterキーを押した際の動作を、OKボタンのクリック動作に変更します。
◎サンプルコード(XAML)
◎サンプルコード(VB)
◎サンプルコード(C#)
Service Pack 2(v2.0.2019.0207)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
下記ようにXAMLコードとVB/C#コードを追加して、Enterキーを押した際の動作を、OKボタンのクリック動作に変更します。
◎サンプルコード(XAML)
<Window.Resources> <Style TargetType="sg:AutoFilterEditor2"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="sg:AutoFilterEditor2"> <Grid x:Name="LayoutRoot" Grid.Column="1"> <Grid.ColumnDefinitions> <ColumnDefinition Width="33"/> <ColumnDefinition/> <ColumnDefinition Width="6"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> <RowDefinition Height="5"/> <RowDefinition Height="Auto"/> <RowDefinition Height="5"/> </Grid.RowDefinitions> <local:MySearchTextBox x:Name="SearchTextBox" Grid.Row="0" Grid.Column="1" Height="20" MinWidth="130" Margin="0,4,0,4"/> <Border Grid.Row="1" x:Name="GlyphPanel" BorderBrush="#FF26A0DA" BorderThickness="1" Background="#3D26A0DA" ClipToBounds="False" HorizontalAlignment="Center" Height="22" Margin="-1,0,0,0" Visibility="Hidden" VerticalAlignment="Top" Width="22"> <Path x:Name="Glyph" Data="F1M10,1.2L4.7,9.1 4.5,9.1 0,5.2 1.3,3.5 4.3,6.1 8.3,0 10,1.2z" Fill="#FF212121" FlowDirection="LeftToRight" Height="11" Width="10"/> </Border> <Grid Height="150" MinWidth="130" Grid.Row="1" Grid.Column="1"> <Border BorderThickness="1" BorderBrush="Black"/> <TextBlock Name="NoMatchTextBlock" Text="" HorizontalAlignment="Center" VerticalAlignment="Center"/> <local:MyAutoFilterListBox x:Name="ItemsPresenter" DisplayMemberPath="DisplayText"/> </Grid> <StackPanel Orientation="Horizontal" HorizontalAlignment="Right" Grid.Row="3" Grid.Column="1"> <Button Name="OKButton" Content="OK" MinWidth="60" Margin="2"></Button> <Button Name="CancelButton" Content="Cancel" MinWidth="60" Margin="4,2,0,2"></Button> </StackPanel> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="True"> <Setter Property="Visibility" TargetName="GlyphPanel" Value="Visible"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style> </Window.Resources>
◎サンプルコード(VB)
Imports GrapeCity.Windows.SpreadGrid.Presenters
Imports System.Reflection
Imports System.Windows.Automation.Peers
Imports System.Windows.Automation.Provider
Public Class MySearchTextBox
Inherits SearchTextBox
Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs)
MyBase.OnKeyDown(e)
If (e.Key = Key.Enter) Then
Dim obj As DependencyObject = Me
While (Not (obj) Is Nothing)
If (TypeOf obj Is AutoFilterEditor2) Then
Dim button As Button = CType(GetType(FrameworkElement).GetMethod("GetTemplateChild", (BindingFlags.NonPublic Or BindingFlags.Instance)).Invoke(CType(obj, AutoFilterEditor2), New Object() {"OKButton"}), Button)
Dim peer As ButtonAutomationPeer = New ButtonAutomationPeer(button)
Dim invokeProv As IInvokeProvider = CType(peer.GetPattern(PatternInterface.Invoke), IInvokeProvider)
invokeProv.Invoke()
Exit While
End If
obj = VisualTreeHelper.GetParent(obj)
End While
End If
End Sub
End Class
Public Class MyAutoFilterListBox
Inherits AutoFilterListBox
Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs)
MyBase.OnKeyDown(e)
If (e.Key = Key.Enter) Then
Dim obj As DependencyObject = Me
While (Not (obj) Is Nothing)
If (TypeOf obj Is AutoFilterEditor2) Then
Dim button As Button = CType(GetType(FrameworkElement).GetMethod("GetTemplateChild", (BindingFlags.NonPublic Or BindingFlags.Instance)).Invoke(CType(obj, AutoFilterEditor2), New Object() {"OKButton"}), Button)
Dim peer As ButtonAutomationPeer = New ButtonAutomationPeer(button)
Dim invokeProv As IInvokeProvider = CType(peer.GetPattern(PatternInterface.Invoke), IInvokeProvider)
invokeProv.Invoke()
Exit While
End If
obj = VisualTreeHelper.GetParent(obj)
End While
End If
End Sub
End Class
◎サンプルコード(C#)
using GrapeCity.Windows.SpreadGrid.Presenters;
using System.Reflection;
using System.Windows.Automation.Peers;
using System.Windows.Automation.Provider;
public class MySearchTextBox : SearchTextBox
{
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.Key == Key.Enter)
{
DependencyObject obj = this;
while (obj != null)
{
if (obj is AutoFilterEditor2)
{
Button button = typeof(FrameworkElement).GetMethod("GetTemplateChild", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(obj as AutoFilterEditor2, new object[] { "OKButton" }) as Button;
ButtonAutomationPeer peer = new ButtonAutomationPeer(button);
IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
invokeProv.Invoke();
break;
}
obj = VisualTreeHelper.GetParent(obj);
}
}
}
}
public class MyAutoFilterListBox : AutoFilterListBox
{
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.Key == Key.Enter)
{
DependencyObject obj = this;
while (obj != null)
{
if (obj is AutoFilterEditor2)
{
Button button = typeof(FrameworkElement).GetMethod("GetTemplateChild", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(obj as AutoFilterEditor2, new object[] { "OKButton" }) as Button;
ButtonAutomationPeer peer = new ButtonAutomationPeer(button);
IInvokeProvider invokeProv = peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
invokeProv.Invoke();
break;
}
obj = VisualTreeHelper.GetParent(obj);
}
}
}
}
旧文書番号
83254