Ответы пользователя по тегу WPF
  • Как создать WPF окно в Dll?

    tomnolane
    @tomnolane
    профессиональный разработчик
    стандартно... подключаете dll (add references)
    подключаете пространство имен using в вашем xaml.cs

    в любом удобном методе создаете новый экземпляр класса окна... далее SHOW(); ... профит...
    ------------------------------------------------------------------
    условно так:
    1) подключили dll
    2) в основном xaml.cs
    using MyWindowInDLL;
    
    ....
    ...
     public MainWindow()
            {
                InitializeComponent();
                var wind = new MyWindowInDLL.SuperWindow();
                wind.Show();
            }
    Ответ написан
    4 комментария
  • Почему webbrowser теряет ссылку после #?

    tomnolane
    @tomnolane
    профессиональный разработчик
    вот мой код который работает (п.с. ВК ругается на низкие IE версии, и в своё время моё приложение работало на моём компе, но когда поставил на комп сестры (у нас ВИН7, но у меня ИЕ обновлённый (11), у неё нет (8), у неё ВК отказывался запускать - мол старый бразуер... по-этому я использую awesomium вместо стандартного браузера):
    public Form1()
            {
                InitializeComponent();
                 
                webbrowser.BringToFront(); 
                webbrowser.Visible = true;
                string url = "https://oauth.vk.com/authorize?client_id=" + VK_main.ID_APP + "&display=page&redirect_uri=https://oauth.vk.com/blank.html&scope=" + VK_main.SCOPE + "&response_type=token&v=" + VK_main.VERSION; 
                webbrowser.LoadingFrameComplete += Webbrowser_LoadingFrameComplete; //жду окончания загрузки
                webbrowser.Source = new Uri(url);
            }
    
            private void Webbrowser_LoadingFrameComplete(object sender, FrameEventArgs e)
            {
                if (!e.IsMainFrame) return;
    
                if(e.Url.ToString().Contains("https://oauth.vk.com/blank.html#access_token="))
                { 
                    int start = e.Url.Fragment.IndexOf("=");
                    int end = e.Url.Fragment.IndexOf("&");
                    VK_main.TOKEN = e.Url.Fragment.Substring(start+1, end-start-1); // записываю в "глобальную переменную токен
                    webbrowser.LoadingFrameComplete -= Webbrowser_LoadingFrameComplete;
                    webbrowser.Visible = false;
                }
            }


    п.с. проблема может быть в версии IE (по умолчанию webbrowser - использует ядро IE)
    Ответ написан
  • Как организовать авторизацию и аутентификацию в WPF приложении?

    tomnolane
    @tomnolane
    профессиональный разработчик
    у меня аналогичная проблема была Как ограничить использование своего декстоп-приложения (.exe) только тем, кто зарегистрирован у меня на сайте (как это выглядит примерно?)?
    Смысл в чём: всё что вы напишите на c# || vb можно будет посмотреть (тем или иным образом). Т.е. если едёт аутентификация внутри приложение - то более менее грамотный специалист через CIL увидет, что и с чем сравнивается. Обусфакция - уберёт праздошатающих и студентов. Я пока (лично для себя) решил так: кто пользуется моим приложением - должен ввести логин и пароль, после чего (используя любой принцип шифрования) - отправляется ко мне на сайт, где сравнивается с логином/паролем из БД. Если гуд, тогда обратным вызовом я передаю непосредственно тот файл, который "рабочий" (exe,dll). Точнее ссылку для скачивания его. Приложение подключает его через рефлексию. Перед закрытием, файл (exe,dll) удаляется. Более грамотно - это использовать API. Т.е. вы создали приложение в WPF - в котором нету никакой информации - только кнопки, методы, классы, сво-ва и т.д. Ваше приложение (после аутентификации) обратным методом возвращает в JSON или XML формате данные, которые непосредственно вставляются в ваш WPF. И это наверно самый правильный вариант - сделать, всё через API. Все проверки/добавления/удаления в БД - только через php вашего сайта. В самой программе - никаких паролей и прочего.

    от слов к делу: https://tomnolane.ru собственно это он

    п.с. регистрацию сделал через сайт
    Ответ написан
  • Почему не выполняется InitializeComponent?

    tomnolane
    @tomnolane
    профессиональный разработчик
    тут походу содержится ваш ответ (в самом внизу)
    Ответ написан
    1 комментарий
  • Как привязать объекта класса Bitmap к компоненту в WPF?

    tomnolane
    @tomnolane
    профессиональный разработчик
    1)
    // image создаю программно, но можно и из x:Name использовать аналогично (без var image = new System.Windows.Controls.Image();)
                            var image = new System.Windows.Controls.Image();
                            BitmapImage bitmap = new BitmapImage();
                            bitmap.BeginInit();
                            bitmap.UriSource = new Uri(path, UriKind.Absolute);
                            bitmap.EndInit();
                            Image.Source = bitmap;


    2)
    [SerializableAttribute]
    [ComVisibleAttribute(true)]
    public sealed class Bitmap : Image


    3) тык
    4)
    <Image Width="90" Height="90" 
           Source="{Binding Path=ImageSource}"
           Margin="0,0,0,5" />

    public object ImageSource {
        get {
            BitmapImage image = new BitmapImage();
    
            try {
                image.BeginInit();
                image.CacheOption = BitmapCacheOption.OnLoad;
                image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
                image.UriSource = new Uri( FullPath, UriKind.Absolute );
                image.EndInit();
            }
            catch{
                return DependencyProperty.UnsetValue;
            }
    
            return image;
        }
    }

    5)
    <Image>
        <Image.Source>
            <BitmapImage UriSource="{Binding Path=ImagePath, Converter=...}" />
        </Image.Source>
    </Image>

    BitmapImage image = new BitmapImage();
    image.BeginInit();
    image.UriSource = new Uri(value as string);
    image.EndInit();
    
    return image;

    6)
    img.Source = (ImageSource)new ImageSourceConverter().ConvertFromString("/www/image.png");
    Ответ написан
    2 комментария
  • Зависимость размера шрифтов от разрешения экрана?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Через binding: тык
    (п.с. только вместо ползунка - размер экрана)
    System.Windows.SystemParameters.PrimaryScreenWidth;
    System.Windows.SystemParameters.PrimaryScreenHeight;

    п.с.с. доп.
    Ответ написан
  • Где можно скачать проекты WPF?

    tomnolane
    @tomnolane
    профессиональный разработчик
    Ответ написан
    Комментировать
  • Как ограничить использование своего декстоп-приложения (.exe) только тем, кто зарегистрирован у меня на сайте (как это выглядит примерно?)?

    tomnolane
    @tomnolane Автор вопроса
    профессиональный разработчик
    решил пока так...
    Assembly assembly = Assembly.LoadFrom("https://мой_сайт.ru/Library2.dll");
                    Type type = assembly.GetType("Library2.MainWindow");
                    dynamic obj = Activator.CreateInstance(type);
                    Window extern= (Window)obj;
                    exnter .Show();  
    // extern- wpf переделанный в dll

    п.с. но в итоге лучше настроить свой API... если сроки позволяют
    Ответ написан
    Комментировать
  • Как создать свойство зависимости в WPF через разметку XAML?

    tomnolane
    @tomnolane
    профессиональный разработчик
    у вас в шапке указано: x:Class="WpfDependency.MainWindow"

    а про Class1 ничего не сказано.... т.к. наследован от FrameworkElement (не в MainWindow) и wpf не видит....
    подключите общий namespace xmlns:m="clr-namespace:WpfDependency" в шапке....
    и ниже до Grid вставте
    <Page>
     <Page.Resources>
                <Class1 x:Key="blablabla"></Class1 >
            </Page.Resources>
    <Grid DataContext="{Binding Source={StaticResource blablabla}}"....
    // ваш код xaml после чего у mycontrols ставите атрибуты
    </Grid>
     </Page>
    </Window>


    т.е. у вас сейчас Class1 ищет в MainWindow....
    Ответ написан
    1 комментарий