我有 3 個按鈕和 3 個文本欄位。我希望每個按鈕都執行相同的方法,但根據單擊的按鈕,應填充不同的文本欄位。我認為這可以通過將每個文本欄位系結到不同的按鈕資料背景關系來實作,但該欄位未填充。這是我的 xaml -
<Window x:Class="vbaGitTool.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:vbaGitTool"
mc:Ignorable="d"
Title="Vba Git Tool"
Height="369"
Width="800"
MaxWidth="800"
MaxHeight="369"
Background="Aquamarine">
<Grid Margin="0,0,0,-1">
<GroupBox Header="Create .txt File From Workbook" HorizontalAlignment="Left" Height="118" Margin="10,10,0,0" VerticalAlignment="Top" Width="772" BorderBrush="Black">
<Grid Margin="0,0,0,4">
<Button
x:Name="workbookSelect_btn"
Content="Select WB Path"
HorizontalAlignment="Left"
Margin="10,30,0,0"
VerticalAlignment="Top"
Width="102"
Click="Click_SelectFilePath" Height="23" />
<TextBox
x:Name="workbookPath_txt"
DataContext="{Binding
ElementName=workbookSelect_btn,
Path=DataContext,
Mode=OneWayToSource}"
HorizontalAlignment="Left"
Height="23"
Margin="126,30,0,0"
TextWrapping="Wrap"
VerticalAlignment="Top"
Width="624"/>
</Grid>
</GroupBox>
<GroupBox Header="Compare .txt Files" HorizontalAlignment="Left" Height="140" Margin="10,156,0,0" VerticalAlignment="Top" Width="772" BorderBrush="Black">
<Grid Margin="0,0,0,-42">
<Button
x:Name="selectDev_btn"
Content="Select Dev File"
HorizontalAlignment="Left"
Margin="10,10,0,0"
VerticalAlignment="Top"
Width="96"
Height="23"/>
<Button
x:Name="selectProd_btn"
Content="Select Prod File"
HorizontalAlignment="Left"
Margin="10,48,0,0"
VerticalAlignment="Top"
Width="96"
Height="23"/>
<TextBox
x:Name="devFilePath"
DataContext="{Binding
ElementName=selectDev_btn,
Path=DataContext,
Mode=OneWay}"
HorizontalAlignment="Left"
Height="23" Margin="120,10,0,0"
TextWrapping="Wrap"
Text=""
VerticalAlignment="Top"
Width="630"/>
<TextBox
x:Name="prodFilePath"
DataContext="{Binding
ElementName=selectProd_btn,
Path=DataContext,
Mode=OneWay}"
HorizontalAlignment="Left"
Height="23"
Margin="120,48,0,0"
TextWrapping="Wrap"
Text=""
VerticalAlignment="Top"
Width="630"/>
</Grid>
</GroupBox>
</Grid>
</Window>
這是可重用的方法
public partial class MainWindow : System.Windows.Window
{
public MainWindow()
{
InitializeComponent();
}
private void Click_SelectFilePath(object sender, RoutedEventArgs e)
{
System.Windows.Forms.OpenFileDialog ofd =
new System.Windows.Forms.OpenFileDialog();
ofd.Title = "Find File";
ofd.Filter = "Excel Files (*.xls) | *.xlsm | All Files(*.*) | *.*";
DialogResult dr = ofd.ShowDialog();
this.DataContext = ofd.FileName;
}
}
uj5u.com熱心網友回復:
為了在 TextBox 中設定文本 - 或者更好的 TextBlock - 您可以在其Text屬性上設定 Binding ,資料流從源到目標,而不是OneWayToSource:
<TextBlock Text="{Binding ElementName=workbookSelect_btn, Path=DataContext}"/>
或者
<TextBlock Text="{Binding DataContext, ElementName=workbookSelect_btn}"/>
現在您還必須設定 Button 的 DataContext,而不是 Window 的 DataContext:
((Button)sender).DataContext = ofd.FileName;
為此目的使用 DataContext 看起來也很奇怪。考慮創建一個視圖模型,視窗中的所有 UI 元素都將其屬性系結到該視圖模型。在網路上搜索 MVVM。
作為解決方法,請改用該Tag屬性:
<TextBlock Text="{Binding Tag, ElementName=workbookSelect_btn}"/>
和
((Button)sender).Tag = ofd.FileName;
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349819.html
