【问题标题】:Accessing .xaml items from different .xaml.cs file?从不同的 .xaml.cs 文件访问 .xaml 项目?
【发布时间】:2018-12-05 08:47:32
【问题描述】:

我在三个文件中有 .xaml 项目。在一个 .xaml 中,我可以选择在运行时更改语言。

我是否有机会访问其他 .xaml 的项目以更改语言?

在 MainWindow.xaml.cs 中更改 .xaml 项的语言

public partial class MainWindow : Window
{
    string strLanguage = "";
    Boolean boolInit = true;

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        Set_Language();
    }

    private void ddlLanguage_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        Set_Language();
    }

    private void Set_Language()
    {
        if (boolInit == false)
        {
            strLanguage = "SMS_Vrana.Languages." + ((ComboBoxItem)ddlLanguage.SelectedItem).Name.ToString();
            ResourceManager LocRM = new ResourceManager(strLanguage, typeof(MainWindow).Assembly);
            lblNumber.Text = LocRM.GetString("strNumber");
            lblMessage.Text = LocRM.GetString("strMessage");
            btnSend.Content = LocRM.GetString("strSend");
            menuItemFile.Header = LocRM.GetString("strMenuFile");
            menuItemMainMenu.Header = LocRM.GetString("strMenuMainMenu");
            menuItemClose.Header = LocRM.GetString("strMenuClose");
            menuItemCheckConnection.Header = LocRM.GetString("strMenuConnection");

        }
    }

Mainwindow.xaml 的.xaml:

<grid>
    <Menu DockPanel.Dock="Top" Margin="0,0,0,434">
        <MenuItem Header="_File" Name="menuItemFile">
            <MenuItem Header="_Main Menu" Click="MenuItem_Click" Name="menuItemMainMenu"/>
            <Separator/>
            <MenuItem Header="Close" Click="MenuItem_Close" Name="menuItemClose"/>
        </MenuItem>
        <MenuItem Header="Monitoring" IsEnabled="False">
            <MenuItem Header="Ping" IsCheckable="True" Checked="menuPingCheck" Unchecked="menuPingUncheck"/>
            <MenuItem Header="GSM" IsCheckable="True" Checked="menuGsmCheck" Unchecked="menuGsmUncheck"/>
        </MenuItem>

        <MenuItem Header="Check Connection" Click="menuItemCheckConnection_Click" Name="menuItemCheckConnection"/>

        <ComboBox x:Name="ddlLanguage" SelectionChanged="ddlLanguage_SelectionChanged" Height="23" Width="80">
            <ComboBoxItem IsEnabled="False" IsSelected="True" Content="Language"/>
            <ComboBoxItem x:Name="English" Content="English"/>
            <ComboBoxItem x:Name="Czech" Content="Cesky"/>
        </ComboBox>

        <MenuItem Header="_Language" x:Name="menuLangTest" IsEnabled="True" Visibility="Hidden">
            <MenuItem Header="Czech" x:Name="menuCzech" Checked="menuItemCzechCheck" Unchecked="menuItemCzechUnche"/>
            <MenuItem Header="English" x:Name="menuEng" Checked="menuItemEngCheck" Unchecked="menuItemEngUnche"/>
        </MenuItem>


    </Menu>


    <Ellipse Fill="#000000" Stroke="#000000" Margin="10,0,0,347" x:Name="ellGSM" HorizontalAlignment="Left" Width="38" Height="38" VerticalAlignment="Bottom" Visibility="Hidden"/>
    <Ellipse Fill="#000000" Stroke="#000000" Margin="204,0,0,347" Name="ellCol" HorizontalAlignment="Left" Width="38" Height="38" VerticalAlignment="Bottom" Visibility="Hidden"/>
    <TextBox x:Name="txtNumber" MaxLength="13" HorizontalAlignment="Left" Height="26" TextWrapping="Wrap" VerticalAlignment="Top" Width="310" Margin="10,153,0,0" PreviewTextInput="txtNumber_PreviewTextInput"/>
    <TextBox x:Name="txtMessage" MaxLength="1300" HorizontalAlignment="Left" Height="100" TextWrapping="Wrap" VerticalAlignment="Top" Width="310" Margin="10,250,0,0"/>
    <Button x:Name="btnSend" Cursor="Hand" Content="Send!" HorizontalAlignment="Left" VerticalAlignment="Top" Width="310" Margin="10,407,0,0" Height="52" FontSize="36" Click="btnSend_Click"/>
    <TextBlock Grid.Column="0" Name="lblNumber" Text="Number" Margin="10,122,213,321"  FontSize="16"/>
    <TextBlock Grid.Row="0" Grid.Column="0" Name="lblMessage" Text="Message" Margin="10,217,213,224" FontSize="16"/>
    <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="GSM" VerticalAlignment="Top" Margin="53,46,0,0" Name="txtblockGsm" Visibility="Hidden"/>
    <TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="PING" VerticalAlignment="Top" Margin="172,46,0,0" Name="txtblockPing" Visibility="Hidden"/>
    <Image HorizontalAlignment="Left" Name="imgGsm" Height="42" VerticalAlignment="Top" Width="49" Margin="271,40,0,0" Source="C:\Users\lvrabel\source\repos\SMS Vrána\SMS Vrána\Images\GsmGreen.png" Visibility="Hidden"/>
    <Label Content="1300" HorizontalAlignment="Left" Margin="287,345,0,0" VerticalAlignment="Top" Height="25" Name="lblLeftCharacters" />
    <Label Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="280,84,0,0" Name="lblGsmSignal" Width="40"/>
   </grid>

.xaml of Authentication.xaml 我想在 MainWindow.xaml.cs 中访问以更改该项目的语言。我只想在整个应用程序中更改语言,而不仅仅是一个窗口。

<Grid Margin="0,-17,0,0">

    <Menu DockPanel.Dock="Top" Margin="0,17,0,432">
        <MenuItem Header="File" FontSize="16" Name="menuItemFile">
            <MenuItem Header="Back on Main Menu" Click="menuItemMainMenuClick"/>
            <Separator/>
            <MenuItem Header="Close" Click="menuItemCloseClick"/>
        </MenuItem>
    </Menu>



    <Label Content="IP Adress" Name="lblIPAddress" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,210,0,0" Height="36" Width="101" FontSize="16"/>
    <Label Content="Login" Name="lblLogin" HorizontalAlignment="Left" Margin="10,279,0,0" VerticalAlignment="Top" Height="31" Width="59" FontSize="16"/>
    <Label Content="Password" Name="lblPassword" HorizontalAlignment="Left" Margin="10,343,0,0" VerticalAlignment="Top" Height="31" Width="75" FontSize="16"/>
    <TextBox HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" VerticalAlignment="Top" Width="292" Margin="10,251,0,0" Name="txtBoxIP" PreviewTextInput="txtBoxIP_PreviewTextInput"/>
    <TextBox HorizontalAlignment="Left" Height="23" TextWrapping="Wrap" VerticalAlignment="Top" Width="292" Margin="10,315,0,0" Name="txtBoxLogin"/>
    <PasswordBox HorizontalAlignment="Left" VerticalAlignment="Top" Width="292" Margin="10,379,0,0" PasswordChar="*" Name="pswBox" Height="23" />
    <CheckBox Content="Remember me!" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,413,0,0" Name="CheckBoxRemCredts" Checked="CheckBoxRemCredts_Checked"/>
    <Button Content="Login" Cursor="Hand" HorizontalAlignment="Left" Height="34" Margin="10,442,0,0" VerticalAlignment="Top" Width="292" Name="btnLoginAuth" Click="btnLoginAuth_Click" FontSize="18"/>
</Grid>

【问题讨论】:

  • 抱歉,@Dennis 是什么意思?我已经描述了我想要获得帮助的问题。
  • 他的意思是你解释得不够多,无法帮助你。我们知道以某种方式涉及“xaml”。那可以是任何东西。一个窗口一个用户控件,资源字典......“改变语言”实际上是什么意思。答案可以是把你正在做的任何事情变成一个用户控件,你可以在任何地方重复使用它。或者它可能是别的东西。无法判断。
  • 好吧,我想你会明白的。例如 menuItem 在 Main.xaml 中的内容。我需要可以从 Authentication.xaml.cs 访问该 menuItem,以便我可以将 menuitem.Header 更改为另一种语言。更改语言 obv 意味着它使用 .resx 中的变量将项目和所有文本/内容/标题的语言更改为不同的语言
  • 抱歉,我不清楚。

标签: c# wpf xaml


【解决方案1】:
  • 你可以访问任何xamlxaml 代码,除非它们在同一个项目和同一个解决方案中。

  • 你只需要初始化你想在xaml.cs文件中使用的其他xaml。

  • 例如我有两个xaml文件Main.xamlLogin.xaml

  • 所以我可以在Main.xaml.cs 中使用登录视图及其元素

  • 语法: Main.xaml.cs

Login login=new Login();

  • 现在您可以访问登录页面的任何控件,只要您为您使用的每个元素命名。
  • 例如:login.TextBlockEmail.Text="yourtext";

更新答案:

嗨,我找到了你要找的东西。您的整个想法是实现本地化,与主视图关联的所有视图都应更新。

有多种方法可以实现这一点,我在这里分享可能对您有所帮助的链接:

https://www.codeproject.com/Articles/22967/WPF-Runtime-Localization

https://www.codeproject.com/Articles/35159/WPF-Localization-Using-RESX-Files

https://social.msdn.microsoft.com/Forums/vstudio/en-US/4a7f049b-f1b7-4982-874f-f9ecfe3d9140/how-to-change-the-language-in-my-view-wpf?forum=wpf

c# - localization - changing language in wpf app

【讨论】:

  • 谢谢你。我现在可以这样访问它。但是当我在 MainWindow 中更改语言时,它也不会在 Authentication 中更改它。你不知道吗?
  • 请查看我更新的答案。希望对你有所帮助。
【解决方案2】:

您所要求的都是可能的 - 您当然可以在后端文件 (.xaml.cs) 中获取对某些控件的引用,然后将其分配给两个类都可见的某个变量。

但是,最好使用事件来完成。您在主类上定义了一些应该对每个窗口可见的事件,然后在每个窗口的代码中订阅它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多