Доступ к элементам .xaml из другого файла .xaml.cs? - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть элементы .xaml в трех файлах.В одном .xaml у меня есть возможность сменить язык при запуске.

Есть ли шанс, как я могу получить доступ к элементам других .xaml, чтобы изменить язык?

Изменение языка элементов .xaml в MainWindow.xaml.cs

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");

        }
    }

.xaml из Mainwindow.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 из 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>

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018
  • U может получить доступ к xaml коду любого xaml до тех пор, пока они не находятся в одном проекте и одном решении.

  • U просто нужноинициализируйте другой xaml, который вы хотите использовать в файле xaml.cs.

  • Например, У меня есть два файла xaml Main.xaml и Login.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 # - локализация - изменение языка в приложении wpf

Спасибо,

Пожалуйста, примите мой ответ, если он поможет вам в вашей проблеме.

0 голосов
/ 05 декабря 2018

То, что вы просите, возможно - конечно, вы можете получить ссылку на некоторый элемент управления в бэкэнд-файле (.xaml.cs), а затем назначить его какой-то переменной, которая видна обоим классам.

Однако этолучше сделать с помощью событий.Вы определяете какое-то событие в своем главном классе, которое должно быть видно каждому окну, а затем подписываетесь на него в коде для каждого окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...