C# WPF タッチキーボードを表示させたくない

投稿者: Anonymous お世話になっています。 C#のWPFでアプリを開発しています。 Windows10のタブレットモードで、TextBoxをタップすると自動的にタッチキーボードが表示されますが、これを表示させないようにしたいです。 タッチキーボードの代わりに、画面内にキーボード風にボタンを並べてそれをタッチして入力するようにしたいですが、自動的に表示されるタッチキーボードが邪魔になるためです。 以下試してみたことです。 テキストボックスのPreviewGotKeyboardFocusイベントでEventArgsのHandledをtrueにする。 →キーボードは出なくなりましたがフォーカスも当たらなくなりました。 テキストボックスのGotFocusイベントでWindowsのプロセスからtabtipを探し出し、KILLする。 →キーボードは出なくなりましたが、エクスプローラー等でもキーボードが出なくなり文字入力ができなくなってしまいました。 何かいい方法をご存知の方いらっしゃいませんか? よろしくお願いいたします。 解決 お世話になっております。 自己レスですが、解決方法を見つました。 少しアプローチが違い、気持ちの良い方法ではありませんが、以下のURLを参考にし、TextBoxのGotKeyboardFocusでキーボードを閉じる処理を入れることで実現できました。 https://stackoverflow.com/questions/17090325/show-hiding-the-windows-8-on-screen-keyboard-from-wpf 実装したコードは次のような感じです。 txtCode.GotKeyboardFocus += (sender, eventArg) => { int iHandle = FindWindow(“IPTIP_Main_Window”, “”); if (iHandle > 0) { // close the window using API SendMessage(iHandle, WM_SYSCOMMAND, SC_CLOSE, 0); } //オリジナルのキーボードを表示する処理・・・ } 以上です。 他に何かいい方法があれば、ご教示お願いいたします。 回答者: Anonymous

TextBlock内がダブルクリックされたときに、対応する行番号が知りたい

投稿者: Anonymous 例えば qwer asdf zxcv と表示されているときに、qの位置でダブルクリックされたら0行目, dの位置でダブルクリックされたら1行目, などの情報を取得したいです。 LabelなどTextBlock風の見た目であればTextBlockでなくてもかまいません。ただし、行を跨いでドラッグした場合でもそれらが選択され、コピー可能である必要があります。 解決 TextBoxをダブルクリックすると、MouseButtonEventの前に単語が選択されるようで、これを利用してSelectionStartから逆算することが出来ました。 void TextBox_MouseDoubleClick(object sender, MouseButtonEventArgs e) { int line = TextBox.Text.Substring(0, TextBox.SelectionStart).Split(new[] { Environment.NewLine, “n”, “r” }, StringSplitOptions.None).Skip(1).Count(); } 回答者: Anonymous

Reproducir video en MediaElement WPF

publicado por: Anonymous Estoy trabajando en una aplicación de escritorio WPF, Windows 10, Visual Studio 2015. En el cual al momento de ir a la ubicación del video se reproduzca, tengo el siguiente código. XAML: <Window x:Class=”ReconocimientoVoz.MainWindow” xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″ xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″ xmlns:local=”clr-namespace:ReconocimientoVoz” mc:Ignorable=”d” Title=”MainWindow” Height=”350″ Width=”525″> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width=”28*”/> <ColumnDefinition Width=”19*”/> </Grid.ColumnDefinitions> <Rectangle x:Name=”rectColor”…(Continue Reading)

Convertir codigo java a c#

publicado por: Anonymous Buenos días. Me han pasado una aplicación de escritorio en java para convertirla a WPF (c#). No conozco mucho de java pero intuyendo lo que hace, poco a poco la he conseguido traducir a excepción de un bloque de código. El código es el siguiente: string key = “CLAVEPARACONVERSION”; string base64EncryptedString =…(Continue Reading)

WPFのプロジェクトでリファレンス情報の保存される場所について

投稿者: Anonymous mshtmlを使用するためにソリューションエクスプローラーからAdd ReferencesでMicrosoft.mshtmlへのリファレンスを追加しました。 このリファレンスを追加した時にどのファイルが変更されているか気になってプロジェクト内のファイルをack mshtmlで検索してみたのですが該当のテキストが見つかりませんでした。 追加されたリファレンス情報はどのファイルにどのように保存されているのでしょうか? 解決 正しい操作ではありません。COM – Type Librariesの一覧からMicrosoft HTML Object Libraryを選択するべきです。 .NETではタイプライブラリを直接扱うことはできません。そのため、Visual Studioは内部でTlbimp.exe (タイプ ライブラリ インポーター)を実行し、タイプライブラリと同等なアセンブリを生成した後に、生成されたアセンブリをプロジェクトに追加します。 しかし、このような操作でアセンブリが乱立するのは危険です。そこで.NETではプライマリ相互運用機能アセンブリという機能を提供しています。その上でMicrosoft HTML Object LibraryにはMicrosoft.mshtmlという名前でプライマリ相互運用機能アセンブリが登録されています。 最終的にMicrosoft HTML Object Libraryを選択するとプロジェクトファイル(.csproj)には <ItemGroup> <COMReference Include=”MSHTML”> <Guid>{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}</Guid> <VersionMajor>4</VersionMajor> <VersionMinor>0</VersionMinor> <Lcid>0</Lcid> <WrapperTool>primary</WrapperTool> <Isolated>False</Isolated> <EmbedInteropTypes>True</EmbedInteropTypes> </COMReference> </ItemGroup> という設定が追加されます。{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}とはMicrosoft HTML Object LibraryのタイプライブラリのID(LIBID)です。 レジストリエディタでHKEY_CLASSES_ROOTTypeLib{3050F1C5-98B5-11CF-BB82-00AA00BDCE0B}4.0を参照すると Microsoft HTML Object Library Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a が登録されていることが確認できます。 回答者:…(Continue Reading)

ContextMenuOpening内で原因となったContextMenuを区別したい

投稿者: Anonymous ListBoxとListBoxItemにそれぞれContextMenuを設定し、項目と項目外で別のコンテキストメニューを開くようにしています。 このとき、ListBoxItemのコンテキストメニューを開いたときにListBoxのContextMenuOpeningイベントも同時に呼ばれてしまいます。 イベント内でどのContextMenuが開かれたのかを区別する方法はありますでしょうか。 再現コード <Window x:Class=”ContextMenuTest.MainWindow” xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″ xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″ xmlns:local=”clr-namespace:ContextMenuTest” mc:Ignorable=”d” Title=”MainWindow” Height=”450″ Width=”800″> <Grid> <ListBox ItemsSource=”{Binding Items}” ContextMenuOpening=”ListBox_ContextMenuOpening”> <ListBox.ItemContainerStyle> <Style TargetType=”ListBoxItem”> <EventSetter Event=”ContextMenuOpening” Handler=”ListBoxItem_ContextMenuOpening” /> <Setter Property=”ContextMenu”> <Setter.Value> <ContextMenu> <MenuItem Header=”ItemMenu” /> </ContextMenu> </Setter.Value> </Setter> </Style> </ListBox.ItemContainerStyle> <ListBox.ContextMenu> <ContextMenu> <MenuItem Header=”ListBoxMenu” /> </ContextMenu> </ListBox.ContextMenu> </ListBox> </Grid> </Window> using System.Diagnostics; using System.Windows;…(Continue Reading)

C# WPF 動作時の挙動について

投稿者: Anonymous C# WPF 初歩的なことで申し訳ないのですが、予め準備してあるデータをループなどで処理しているときにMainWindowが操作不能になるはどうにかできないのでしょうか? Timerを用いて無限ループを回避しても、一定時間は動くのがとまってしまいます。 何か解決方法、もしくは仕組みについての参考文献等があればお教えいただきたいです。 解決 まず、最初に理解するべきなのは、この場合マルチスレッド処理が必要ということです。 WPFでは、UI上のボタンが押下された場合など、コードビハインドやコマンドパターンで呼び出されるメソッドはUIスレッドで動作します。UIスレッドは描画に使用されるスレッドですから、そのまま長時間そのメソッド内で処理を行い続けるとUIの描画が止まってしまうのです。 様々な手続きで、長時間メソッド内で処理を継続したい場合、UIスレッドとは別のスレッドで実行する必要があります。マルチスレッド処理に関しては単純にこうすれば解決、という話ではなく非常に複雑な問題が絡み合うので、WPF+マルチスレッドやUIスレッドについていろいろと検索してみてください。 昨今の解決策としては、takemori_kondoさんの挙げているasync/awaitやTaskを利用するのがモダンな手法ですが、古典的なアプローチとしてはBackgroundWorker等を利用したり、よりプリミティブにThreadを自分で生成することもできます。 async/awaitは非常に便利なのですが、マルチスレッドは非常に奥が深くやっかいな問題ですので、まずはプリミティブな手法を色々と試すなどして理解を深められることをお薦めします。 .NET開発における非同期処理の基礎と歴史(1/2) – @IT http://www.atmarkit.co.jp/fdotnet/chushin/masterasync_01/masterasync_01_01.html 非同期処理の基礎 https://www.slideshare.net/ufcpp/ss-34533225 【WPF】お手軽簡単別スレッド BackgroundWorker | 創造的プログラミングと粘土細工 http://pro.art55.jp/?eid=1180258 回答者: Anonymous

MouseEnterイベントを別の場所で同時に起こす

投稿者: user24307 プログラム、スタック・オーバーフロー共に初心者です。 記述するべき内容が不足していたら申し訳ありません。 どんどんマサカリを投げていただけるとありがたいです。 環境 ・Microsoft Visual Studio 2013 Express for Windows ・.NET Framework 4.5.1 ・C# 5.0 現在の動き xamlで、IconつきButtonとHyperlinkつきTextboxをStackpanelで並べています。 Textboxはマウスカーソルが乗るとテキストに下線が表示され、 マウスカーソルが外れると下線が消えるようにしています。 やりたい事 Buttonにマウスカーソルが乗ると右にあるテキストに下線を表示し、 マウスカーソルが外れると下線が消えるようにしたいです。 ソース ・xaml <UserControl.Resources> <ResourceDictionary> <Style TargetType=”TextBlock” BasedOn=”{StaticResource DefaultDialogTextStyleKey}”> <Setter Property=”Margin” Value=”10,0,0,0″/> </Style> <Style TargetType=”TextBox” BasedOn=”{StaticResource DefaultTextBoxStyleKey}”/> <Style TargetType=”Button” BasedOn=”{StaticResource DialogButtonStyle}”> <Setter Property=”Height” Value=”32″/> <Setter Property=”Width” Value=”32″/> <Setter Property=”Margin” Value=”0,2,0,2″/> </Style>…(Continue Reading)

WPFで特殊文字が特定の条件下で文字化けする

投稿者: Anonymous WPF+C#で作ったソフトウェアのTextBoxに特殊な文字を入力すると特定の条件下で文字化けが発生します。 例えば、U+06EEを文字コード表からコピーし、TextBoxに貼り付けるとそのままの状態では正しく表示されます。 しかし、貼り付けた文字の前にスペースなどを追加すると □ に化けてしまいます。 TextBlockに表示させた場合も同様に文字化けします。 これは.NET Frameworkのバグでしょうか? .NET Frameworkは4.5.2を使用しています。 解決 現象としてはフォントが適切に選択されていない状態になっているようです。ですのでFontFamilyをアラビア語が表示可能なように日本語のみに範囲を限定して指定するか、 <!– ルート要素に xmlns:sys=”clr-namespace:System;assembly=mscorlib” を記述 –> <TextBox> <TextBox.FontFamily> <FontFamily> <FontFamily.FamilyNames> <sys:String x:Key=”ja-JP”>MS Mincho</sys:String> </FontFamily.FamilyNames> </FontFamily> </TextBox.FontFamily> </TextBox> もしくはアラビア語フォントを指定すると改善します。 <TextBox FontFamily=”Aldhabi” /> 回答者: Anonymous

ListBoxの背景にDrap&Dropする際にDrop先Indexを計算するには?

投稿者: Anonymous ListBox上のListBoxItem、またはListBox上のListBox.Backgroundが見えている領域に対してDrag&Dropを行い、要素の並べ替え/挿入を行おうとしています。 この時、ListBoxの背景要素にDropした際、Dropした位置によって適切な挿入先のIndexを計算する方法が分からず、詰まってしまっています。 – 出来たこと ListBox上のListBoxItemに対するDropは、DragEventArgs.OriginalSourceを使って現在Dropしようとしている先のFrameworkElementを特定→ListBox.ItemsSourceからDataContextの内容で探す……などの方法でDrop先Indexを計算する事ができました。 – 出来なくて困っていること(知りたいこと) ListBox上のDrop位置において、以下の図のような領域⇔Index値となる計算をしたいのですが、以下の3点を計算・区別する方法が分かりませんでした。 ListBoxItem間のMarginの位置へのDrop時のIndex計算 WrapPanelでの折り返し位置(図上のIndex 4の位置)へのDrop時のIndex計算 1,2に含まれない末尾全般領域(図上のIndex 6の位置)へのDrop時のIndex計算 実現方法が分かる方、よろしくお願いします。 解決 泥臭い解法ですが…ListBoxItemの領域を左上から順に取得し、マウス座標の手前にあるかどうかを判定する方法で実装できます。 下記のサンプルコードでは、GetNextItemメソッドでマウス座標直後にあるListBoxItemを取得し、リスト内のインデックスはMoveItemメソッド内のIList.IndexOfで取得しています。 MainWindow.xaml.cs using System.Collections; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; namespace WpfApplication1 { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { private ListBoxItem DropTarget; public…(Continue Reading)

LabelのBackgroundを、ColorDialogのcolorに適用したいです

投稿者: Anonymous LabelのBackgroundを、System.Windows.Forms.ColorDialogのcolorに適用したいです。 方法が分かる方がいましたら、ご教授をお願いします。 解決 Labelの背景は単色とは限りませんが、SolidColorBrushであれば var scb = label.Background as SolidColorBrush; if (scb!=null) { var c = scb.Color; var gdipColor = System.Drawing.Color.FromArgb(c.A, c.R, c.G, c.B); } とSystem.Drawing.Colorに変換できると思います。 またWPFとWindows Formsダイアログを相互運用する場合、WindowInteropHelperを使用してIWin32Windowを実装します。 class MainWindow : Window, System.Windows.Forms.IWin32Window { public IntPtr Handle { return new WindowInteropHelper(this); } } こうすることでShowDialog()時にOwnerとしてWPFウィンドウが指定できます。 回答者: Anonymous

SerialPortのOpen(), Close()を連続で投げるとフリーズする

投稿者: Anonymous .NET Framework 4.7.2 Microsoft Visual Studio Community 2019 Version 16.6.2 上記環境でシリアル通信を行うWPFアプリを作成しています。 SerialPortクラスのOpen(), Close()を下記のように連続で投げた場合にフリーズが発生します。 private bool CheckPortState() { var able = true; var mes = string.Empty; try { SelectedPort.Open(); SelectedPort.Close(); } catch(Exception e) { mes = e.Message; able = false; } var str = able ? "Available." : "Disable."; Main.Instance.EventLogger.WriteLine($"{SelectedPort.PortName} … {str}"); if (!able)…(Continue Reading)

C++, C++/CLI, C#間のプロパティ変更通知

投稿者: Anonymous 現在、C++, C++/CLI, C#(WPF)を用いて画像処理を行うプログラムを試験的に作成しています。 画像処理をメインで行うのはC++プロジェクトで、これはスタティックライブラリです。 それをC++/CLIでラップし、ダイナミックライブラリにしています。 WPFプロジェクトでC++/CLIのdllを読み込み、処理された画像を表示させたいと思っています。 この時、画像やその他のプロパティが複数あったとして それらの変更をC++プロジェクトからWPFプロジェクトまで伝番させる必要があります。 しかし、C++とC++/CLI間、C++/CLI, C#間でのプロパティ変更通知を どの様に実装すればよいのかわかりません。 どういった手法を取るべきか、そもそもそういったやり方ではないのか 参考になるWebページなどをご存じでしたらご教示いただければと思います。 <解決> 回答で紹介してもらったサイトを参考に変更通知を実装しました。 https://github.com/Nao05215/CamTest 解決 ここ、参考になりませんか?C++/CLIは使ってないみたいですが。 C#からC++のDLLへデリゲートを渡し、DLL側でコールバック https://qiita.com/yz2cm/items/8bc26f789c3308799aa9 回答者: Anonymous

Cambios en proceso principal desde un task

publicado por: Anonymous Tengo una aplicación y quiero comprobar a través de un Task si el usuario abre otras aplicaciones y en ese caso minimizar mi aplicación (pero que la pueda seguir usando por eso el task). El problema es que lanza una excepción System.InvalidOperationException: ‘El subproceso que realiza la llamada no puede obtener acceso…(Continue Reading)

Añadir componentes a Grid de forma ordenada en WPF

publicado por: Anonymous Quisiera saber cómo puedo agregar componentes a un Grid en WPF en tiempo de ejecución de manera que me aparezcan uno detrás de otro. Hasta ahora lo tengo así: Implementado con el siguiente código: <Grid HorizontalAlignment=”Left” Width=”892″ Margin=”106,0,0,0″> <Label Content=”Parametrización” Margin=”405,63,405,0″ FontSize=”10″ Foreground=”#FFB9B9B9″/> <StackPanel x:Name=”stackParametros” HorizontalAlignment=”Left” Height=”60″ VerticalAlignment=”Top” Width=”59″ Margin=”0,3,0,0″> <Image Height=”32″…(Continue Reading)

¿Como limpiar el contendio un DataGrid?

publicado por: Anonymous Tengo en una ventana (WPF) y codigo C# que contiene lo siguiente un boton: <Button x:Name=”btnBuscar” Content=”Buscar por” HorizontalAlignment=”Left” Margin=”157,10,0,0″ VerticalAlignment=”Top” Width=”85″ Height=”30″ Click=”btnBuscar_Click”/> un comboBox: <ComboBox x:Name=”cmbBuscarPor” HorizontalAlignment=”Left” Margin=”247,10,0,0″ VerticalAlignment=”Top” Width=”120″ Height=”30″> <ComboBoxItem Content=”Nombre”/> <ComboBoxItem Content=”Apellido paterno”/> <ComboBoxItem Content=”Puesto”/> </ComboBox> un Texbox: <TextBox x:Name=”tbBusqueda” Height=”30″ Margin=”0,10,160,0″ TextWrapping=”Wrap” Text=”Ingrese texto” VerticalAlignment=”Top” VerticalContentAlignment=”Center”…(Continue Reading)

WPFのデザイン時ItemsSourceのXAMLでの設定方法について

投稿者: Anonymous WPF、.Net 4.5、Visual Studio 2013 Communityの環境で、 デザイン時にItemsSourceにXAMLから値を設定する方法について知っている方が居れば教えて下さい。 XAML上でデザイン時DataContextを設定する時(d:DataContext=”{d:DesignData Source=SomeDesignData.xaml}”)の様な形で、ItemsControl系のUIElementに対してデザイン時ItemsSourceを設定したいと思っています。 コード上で行うのであれば、対象となるUIElementのDataContextに設定されるクラスのコンストラクタでDesignerProperties.GetIsInDesignMode(new DependencyObject())を使って条件分岐してItemsSourceのBinding先プロパティにデザイン用データをセットすれば良いのですが、これを使うといわゆるMVVMのVM層にデザイン用データが張り出してしまうため、出来れば避けたいと思っています。 何か良い方法、あるいは定石となる方法があれば教えて下さい。 解決 DataContextもd:DataContextもFrameworkElementの階層構造に従ったBindingのPathを受け継ぎます。 つまり、 <Grid x:Name=”parentGrid”> <ListBox x:Name=”list1″/> </Grid> という親子関係があった場合、list1のItemsSourceを直接サンプルデータにBindするのではなく、parentGridのDataContext及びd:DataContextを指定し、list1のItemsSourceは{Binding Items}などとparentGridのDataContextからの相対PathでBindして、 <Grid x:Name=”parentGrid” d:DataContext=”{d:DesignData /SampleData/Foo.xaml}”> <ListBox x:Name=”list1″ ItemsSource=”{Binding Items}”/> </Grid> 等としてやれば、DataContextにVMがBindされている場合はviewmodel.Itemsメンバに、デザイン時は、Foo.xamlのサンプルデータの階層構造のItemsに、それぞれコードビハインドを考慮することなく、ViewModelとサンプルデータを切り替えることができます。 参考: Web APIで取得したXML/JSONからVSデザイナで表示できるリアルなXAMLサンプルデータを作成する – Neutral Scent http://d.hatena.ne.jp/kaorun/20131202/1385955900 回答者: Anonymous

WPF GridViewへのバインド対象がListの中のListの場合

投稿者: Anonymous ご教授よろしくお願いします。 以下のコードのようにParentクラスのChildListプロパティにはChildクラスのインスタンス、さらにChildインスタンスはItemListというプロパティをもっており、さらにList構造になっています。 _x000D_ _x000D_ public class Parent_x000D_ {_x000D_ public List<Child> ChildList{get;set;}_x000D_ }_x000D_ _x000D_ public class Child_x000D_ {_x000D_ public List<string> ItemList{get;set;}_x000D_ }_x000D_ _x000D_ public class Item_x000D_ {_x000D_ public string ItemName {get;set;}_x000D_ } _x000D_ _x000D_ _x000D_ ここでxamlのGridViewに全てのItemを列挙したい場合のバインディング指定の方法がわかりません。。 ご教授ください。 _x000D_ _x000D_ <DataGrid Name=”testGrid” ItemsSource=”{Binding ?}” AutoGenerateColumns=”False” > _x000D_ _x000D_ _x000D_ 今はコードビハインドでforeachを回しながら、ListにAddしていき、最後にGridViewのDataContextに突っ込んでいます。。。 解決 ChildクラスのList<string> ItemListはList<Item>の間違いでしょうか? 入れ子状態のリストを1つのリストにまとめる場合はLinqのSelectManyが使えます。 ※入力内容を参照元のインスタンスに反映したいとのことだったので、DataGridTextColumnを追加してTwoWayバインディングにしました。…(Continue Reading)

¿Cómo puedo ocultar una contraseña de forma que quede “******”?

publicado por: Anonymous Estoy haciendo una aplicación en C# con Visual Studio 2017 (más específicamente, en un WPF) y necesito ocultar el contenido de un TextBox que es una contraseña. Sé que en Forms se usaba el PasswordChar, pero en WPF no existe, ¿alguna sugerencia? solución Seleccionas el TextBox y te vas a la vista…(Continue Reading)

ウィンドウ表示開始時に一瞬白く表示されるのを回避したい

投稿者: Anonymous WPFで黒をメインカラーとしたウィンドウを作っているのですが、その表示開始時に一瞬白く表示され、それがフラッシュしてるように見えてしまいます。 この現象を回避したいのですが方法はありますでしょうか。 再現例 <Window x:Class=”WpfSimple.MainWindow” xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation” xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml” xmlns:d=”http://schemas.microsoft.com/expression/blend/2008″ xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″ mc:Ignorable=”d” Background=”Black” WindowState=”Maximized”> <Grid> </Grid> </Window> このように背景黒の最大化ウィンドウを表示すると、起動時に一瞬白く表示されます。 元の画面が黒いと目立ちやすく、二重に起動すると確認しやすいかと思います。 実際の使用環境ではWindowアプリモードを黒に設定したエクスプローラーからの起動で目立ちます。 環境 Windows 10 64bit (1903) .NET Framework 4.7.2 解決 強引な手法ですが最小化状態で初期化してロード完了後に最大化することで描画が完了した状態で呼び出せます。 xaml Background=”Black” WindowState=”Minimized”> xaml.cs public MainWindow() { InitializeComponent(); Loaded += MainWindow_Loaded; } private void MainWindow_Loaded(object sender, RoutedEventArgs e) { WindowState = WindowState.Maximized; } 回答者: Anonymous

DataGrid選択時に、セルに配置したRadioButtonの文字色を変更したい

投稿者: Anonymous DataGridの行を選択した際に、選択行の背景色を青、文字色を白にしていますが、 セルに配置しているradiobuttonの文字色も選択時に、白色に変更したいのですが なかなか良い方法がみつかりません。どなたか良い方法をご存じの方がいらっしゃいましたら 教えて頂けないでしょうか?よろしくお願い致します。 解決 RelativeSourceを使用してRadioButtonの上位にあるDataGridCellやDataGridRowを参照すれば実現可能です。 例えばDataGridCell.Foregroundには既定の文字色が反映されますので、これをRadioButton.Foregroundにバインドすることが出来ます。 <DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <RadioButton Content=”radio” Foreground=”{Binding RelativeSource={RelativeSource AncestorType=DataGridCell}, Path=Foreground}”> </RadioButton> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> またIsSelectedプロパティにDataTriggerを設定する方法でも実現できます。 <DataGridTemplateColumn> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <RadioButton Content=”radio”> <RadioButton.Style> <Style TargetType=”RadioButton”> <Style.Triggers> <DataTrigger Binding=”{Binding RelativeSource={RelativeSource AncestorType=DataGridRow}, Path=IsSelected}” Value=”True”> <Setter Property=”Foreground” Value=”#fff” /> </DataTrigger> </Style.Triggers> </Style> </RadioButton.Style> </RadioButton> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> 回答者: Anonymous

WPFで線の周りだけ画像を表示する

投稿者: Anonymous WPFのGrid上に線を指定し、その周りだけある画像を表示させるということがしたいです。 調べた結果、LineのStrokeに画像のImageBrushを指定すれば出来そうなことがわかり試したのですが、ImageBrushのStretchがNoneでは、画像の中央を基準に線の画像を描画しており、思ったように表示されません(背景の画像と重なり線が見えなくなるようになって欲しい)。 <Grid Name=”grid”> <Image Name=”canvas” Source=”Images/image.jpg” ></Image> <Line StrokeThickness=”30″ X1=”600″ Y1=”100″ X2=”600″ Y2=”400″> <Line.Stroke> <ImageBrush Stretch=”None” ImageSource=”Images/image.jpg”/> </Line.Stroke> </Line> </Grid> 解決 ImageにUIElement.OpacityMaskもしくはUIElement.Clipを設定すればよいかと思います。 OpacityMaskの場合、設定したBrushの不透明部分だけが表示されます。 <Image Name=”canvas” Source=”Images/image.jpg”> <Image.OpacityMask> <DrawingBrush Viewbox=”0,0,800,800″ ViewboxUnits=”Absolute”> <DrawingBrush.Drawing>> <GeometryDrawing> <GeometryDrawing.Pen> <Pen Thickness=”30″ Brush=”Black” /> </GeometryDrawing.Pen> <GeometryDrawing.Geometry> <LineGeometry StartPoint=”600,100″ EndPoint=”600,400″ /> </GeometryDrawing.Geometry> </GeometryDrawing> </DrawingBrush.Drawing> </DrawingBrush> </Image.OpacityMask> </Image> Clipの場合指定したGeometry内の領域が表示されますので、直線を長方形などに変換してやる必要があります。 <Image Name=”canvas”…(Continue Reading)

AvalonDockの「Dock As Tabbed Document」を無効化したい

投稿者: Anonymous お世話になります。 下図 Visual Studioのような、 ・赤枠(下部でタブ選択可能) ・青枠(上部でタブ選択可能) のようなタブ機能を含めたアプリを作りたい為、 WPF+AvalonDockを用いています。 しかしながらタブ機能だけが欲しく、 LayoutAnchorableの「×ボタン」「Float機能」「Dock機能」「Dock As Tabbed Document機能」「AutoHide機能」「Hide機能」は不要と考えているため、 「CanAutoHide」や「CanClose」でFalseを行っているのですが、 「DockAsTabbedDocument」のみ無効化する方法がわかりません。 下記XAMLのコードを添付いたしますので、下記方法をご存知でしたら、 ご教示いただけないでしょうか。 ・「DockAsTabbedDocument」の機能を無効化する方法  ※出来れば右クリック時も含め「hide」や「Dock」などのコンテキストメニューの表示すら無効化したい。 ※参考までに「上図画像のタブ機能のみ表現するコントロール」ももしご存知であればご教示いただきたいです。 環境は下記です。 Visual Studio 2017 Community C#(.net framework 4.5.2) WPF AvalonDock(3.4.17280.14430) ※https://stackoverflow.com/questions/7959291/can-i-customize-avalondock-context-menu  こちらのリンクも見たのですが、具体的にどのようにコードを修正すればよいのかわからず、  苦戦しております。  何卒ご教示の程よろしくお願いいたします。 <Grid> <ad:DockingManager x:Name=”_dockingManager” Grid.Row=”1″ AllowMixedOrientation=”True” BorderBrush=”Black” BorderThickness=”1″> <ad:DockingManager.Theme> <ad:MetroTheme /> </ad:DockingManager.Theme> <ad:LayoutRoot> <ad:LayoutPanel Orientation=”Horizontal”> <ad:LayoutAnchorablePane DockWidth=”200″ > <ad:LayoutAnchorable CanAutoHide=”False”…(Continue Reading)

MVVMでのListBoxItemのダブルクリックCommadの指定方法

投稿者: Anonymous WPFのListBoxでMVVM的なイベント追加をしたいと思っています。 そこで、ListBoxのアイテムにダブルクリックイベントをCommandを使用して追加しました。 以下の様な形で実装できたのですが、もう少しコンパクトな形にできないでしょうか? ・ItemsSourceを使用する ・ListBoxのアイテム行のどこをダブルクリックしてもイベントが発生する  (TextBlockにイベントをつけたら文字の部分しかダメでした) ・Commandのパラメータにはダブルクリックしたアイテムが入る の条件を満たせれば構わないのでアドバイスお願いします。   ListBox <ListBox Width=”150″ ItemsSource=”{Binding ソース}” ItemContainerStyle=”{DynamicResource ListBoxItemStyle1}”> <ListBox.ItemTemplate> <DataTemplate> <TextBlock Text=”{Binding 表示文字}”/> </DataTemplate> </ListBox.ItemTemplate> </ListBox>   リソース部分 <local:RestorableWindow.Resources> <Style x:Key=”FocusVisual”> <Setter Property=”Control.Template”> <Setter.Value> <ControlTemplate> <Rectangle Margin=”2″ SnapsToDevicePixels=”true” Stroke=”{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}” StrokeThickness=”1″ StrokeDashArray=”1 2″/> </ControlTemplate> </Setter.Value> </Setter> </Style> <SolidColorBrush x:Key=”Item.MouseOver.Background” Color=”#1F26A0DA”/> <SolidColorBrush x:Key=”Item.MouseOver.Border” Color=”#a826A0Da”/> <SolidColorBrush…(Continue Reading)

Modern UI for wpf のリンクメニューのフォントを変えたい。

投稿者: Anonymous WPF Modern UI というものを使っていますが、画像のメニュー部分のFontFamilyを変える事ができず困っております。 どなたかご教授ください。 変更したいフォントはMeiryo UIです。 今はOSのデフォルトフォント(Windows 10だとYu Gothinc?)で表示されます。 参考URL:https://github.com/firstfloorsoftware/mui 試した事は アプリケーション内のXAML内のroot部分(表現の仕方がおかしかったらすみません…)にFontFamilyを指定。  →反映されず GitHubでもとのdllのソース内のFontFamily指定部分をMeiryo UIに変更。 →反映されず https://github.com/firstfloorsoftware/mui ご教授よろしくお願いします。 解決 Modern UI for WPFのソースを見る限り、ModernWindow.Template内のModernMenu.Templateに設置されているListBoxのItemContainerStyleでフォントが明示されているように見えます。ですので通常の方法ではフォントが変更できません。 ライブラリを改変する場合はフォント名を書き換えるだけでも良いのですが、ModernWindowとModernMenuにこのフォント用のプロパティを増やし、各テンプレートで値をListBoxに受け渡しておくと外部から変更できるようになります。 無理やり外部から変更する場合は、 ModernMenuの既定のスタイルでTemplateを定義しなおす。 ModernWindowのビジュアルツリーから当該ListBoxを探してItemContainerStyleを変更する。 という方法が考えられます。 回答者: Anonymous

テキストボックスからフォーカスがはずれません

投稿者: Anonymous テキストボックス以外のスペースをクリックしたら、テキストボックスからフォーカスがはずれるようにしたいのですが、この場合ウインドウのクリックイベント時に、Focus()でウインドウにフォーカスを合わせる方法しかないのでしょうか? textboxにフォーカスが合って以後、他のtextboxやbuttonをクリックするまでフォーカスが移動しません。 (FocusableがTrueの空きスペースをクリックしても、textboxからフォーカスがはずれません) 他の方法が分かる方がいましたらご教授お願いします。 解決 クリックした場所にある UIElement の Focusable が True になっていればフォーカス移動すると思います。 回答者: Anonymous

DataContextを使う際のthisとx:Name指定の違いについて

投稿者: Anonymous this.DataContextで値を反映する場合と btnA.DataContextで値を反映する場合の違いは何でしょうか。 スレッドでbtnA,btnBを同時に実行した場合thisを使った場合は画面がちらつきました。 詳しい方がいましたら教えて頂けると助かります。 XAML <Grid> <Button x:Name=”btnA” Content=”{Binding ButtonContentA}” Click=”Button_ClickA”/> <Button x:Name=”btnB” Content=”{Binding ButtonContentB}” Click=”Button_ClickB”/> </Grid> C# void Worker_ProgressChangedA(object sender, System.ComponentModel.ProgressChangedEventArgs e) { //スレッドの画面再描画でthisを使うと画面がちらつく //this.DataContext = new { ButtonContentA = e.ProgressPercentage }; btnA.DataContext = new { ButtonContentA = e.ProgressPercentage }; } void Worker_ProgressChangedB(object sender, System.ComponentModel.ProgressChangedEventArgs e) { //this.DataContext = new { ButtonContentB…(Continue Reading)

C#で入出力をリダイレクトしているのに出力を受け取れない

投稿者: Anonymous  最近WindowsFormApplicationからWPFに移行したので、その練習がてらにコマンドラインでの操作も同時にできるScheme用テキストエディタを作っているのですが、その際にコマンドラインの内容をTextBoxに出力し、TextBoxでの入力内容をコマンドラインに入力する必要があったので、子プロセスとしてgoshを開きその入出力をリダイレクトしました。  しかし、TextBoxからの入力はgoshに送れるのですがgoshからの標準出力が受け取れません。一方で標準エラーは受け取れるのです。以下がソースコードです。 namespace Schemer { /// <summary> /// Terminal.xaml の相互作用ロジック /// </summary> public partial class Terminal : TextBox { public delegate void MyEventHandler(object sender, DataReceivedEventArgs e); public event MyEventHandler MyEvent = null; Process Scheme = null; readonly string Interpreter = “gosh”; int CurrentIndex = 5; public Terminal() { InitializeComponent(); MyEvent = new MyEventHandler(Event_DataRecieved);…(Continue Reading)

XAMLのStyle.Triggersで複合条件を指定したい

投稿者: Anonymous WPFでラジオボタンのユーザーコントロールを作っています。 このラジオボタンの外見を、IsCheckedとIsEnabledの値に応じて変えたいです。 どちらもboolなので、合計で4種類の外見(DataTemplate)を定義することになると思います。 下記のコードのように、IsCheckedのみであれば、Style.Triggersによって条件を指定し、適用するDataTemplateを切り替えることができることは分かっています。 しかし、IsCheckedとIsEnabledの両方を見て切り替える方法が分かりません。 <!– 4種類の外見に対応するDataTemplateを定義 –> <DataTemplate x:Key=”UnselectedStyle”><!–略–></DataTemplate> <DataTemplate x:Key=”SelectedStyle”><!–略–></DataTemplate> <DataTemplate x:Key=”DisabledUnselectedStyle”><!–略–></DataTemplate> <DataTemplate x:Key=”DisabledSelectedStyle”><!–略–></DataTemplate> <Style TargetType=”{x:Type RadioButton}”> <!– デフォルトの外見 –> <Setter Property=”ContentTemplate” Value=”{StaticResource UnselectedStyle}”/> <!–略–> <!– 条件に応じた外見 –> <Style.Triggers> <Trigger Property=”IsChecked” Value=”True”> <!– ←ここでIsEnabled=Trueも条件に加えたい –> <Setter Property=”ContentTemplate” Value=”{StaticResource SelectedStyle}”/> </Trigger> </Style.Triggers> </Style> 何かご存知の方おられましたら、教えてください。 解決 MultiTriggerがつかえます。 <Style.Triggers> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property=”IsChecked” Value=”true”…(Continue Reading)

¿Como obtener el valor de una celda de un DataGrid?

publicado por: Anonymous Quiero obtener el valor de la celda idUsuario que tiene la siguiente configuracion realizado con Visual Studio 2017 en una ventana (WPF) <DataGridTextColumn Binding=”{Binding Path=idUsuario}” ClipboardContentBinding=”{x:Null}” Header=”idUsuario” HeaderStringFormat=”idUsuario” Visibility=”Hidden”/> Ya que el usuario no tiene por que ver el id lo puse oculto, el usuario selecciona una fila que tiene los datos…(Continue Reading)