windows phone 개발 학습 - 스티커 [속]
분명히 마이크로소프트는 전화, 문자 숫자 제시와 같은 인터페이스를 개방하지 않았다. 그러면 배경도를 수정하는 방법만 남았다.
내 달력 응용 프로그램에서 매일 업데이트가 필요하다는 것을 고려하여tile 배경 그림의 수정은 다음과 같은 몇 가지 방법이 있다.
tile 업데이트는 현재 다음과 같은 몇 가지 방안이 있다. 1. 네트워크 서버를 통해 그림을 전달하여 달력을 업데이트한다. (서버가 임의로 그림을 수정할 수 있고 유연하며 네트워크가 연결되지 않으면 업데이트되지 않는다는 단점이 있다) 2. 로컬에서 달력 그림을 저장하면 소프트웨어가 커진다(이렇게 하는 것을 권장하지 않는다) 3. 로컬에서 자동으로 달력 그림을 그린다(연구할 필요가 있다)
비교를 통해 권장하는 방법은 인터넷에서 그림을 다운로드하는 것이다. 조작은 다음과 같다. 1. 소프트웨어 열기 2, 백그라운드 작업 시작 네트워크 3, 사진 다운로드, tile 4 업데이트, 프로그램 종료 후 백그라운드 작업을 끝내고 tile는 기억성이 있기 때문에 배경 이미지에 변화가 나타나지 않는다.
장점: 1. 그림은 모두 서버에 저장되고 클라이언트의 응용 프로그램이 비교적 작다. 2. 서버 측은 그림을 유연하게 생성하거나 수정할 수 있다. 그림의 크기가 모두 173*173px이면 된다. 3. 그림 생성은 서버 쪽에서만 실행할 수 있고 서버 저장 용량에 비해 그림이 차지하는 공간이 적다.
단점: 1. 네트워크가 연결되지 않은 상황에서 그림을 정상적으로 표시할 수 없다. 구제 조치는 응용 사진만 표시하고 로컬 시간 데이터를 읽어서 타일에 표시하는 것이다. 2. 네트워크 시간은 15초를 초과할 수 없고 이미지 크기는 80K를 초과할 수 없다. 사용자의 네트워크 속도는 예측할 수 없고 신호가 좋지 않을 수 있다. 일단 실패하면 타일은 제때에 업데이트할 수 없다.
이것은 어제 얻은 결론입니다. 오늘 발견한 것은 이미 유행이 지났습니다. 인터넷을 통해 자료를 찾고 그림을 결합한 문장을 발견했습니다. 여기를 클릭하십시오.http://www.cnblogs.com/alexis/archive/2011/07/22/2113253.html
이상의 이 글을 보고 나는 현지에서 그림을 그려서 윈도우즈 폰의 모래상자 저장소에 저장할 수 있다고 생각했다.
그래서 ScheduledSyncTaskAgent의 RefreshPlaster () 를 수정했습니다.방법
public void RefreshTile()
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
Tile t = new Tile();
});
}
Windows phone user control 페이지가 하나만 포함된 프로젝트를 만들었습니다. Tile이 바로 이 페이지 클래스입니다. Tile에서 제 레이아웃은 다음과 같습니다.
<Canvas Name="CanvasForTile" Width="173" Height="173">
<Image Source="/365Plus;component/Images/Default.jpg" HorizontalAlignment="Left"
Name="image1" Stretch="Fill"
VerticalAlignment="Top" />
<TextBlock HorizontalAlignment="Left" Margin="5,5,0,0" Name="YearAndMonthTextBlock" Text="2012 12 " VerticalAlignment="Top" FontFamily="Portable User Interface" FontSize="20" />
<TextBlock HorizontalAlignment="Left" FontFamily="Portable User Interface" Margin="5,35,0,0" Name="DayTextBlock" Text="20" VerticalAlignment="Top" FontSize="35" />
<TextBlock HorizontalAlignment="Left" FontFamily="Portable User Interface" Margin="60,50,0,0" Name="WeekTextBlock" Text=" " VerticalAlignment="Top" FontSize="20" />
<TextBlock HorizontalAlignment="Left" FontFamily="Portable User Interface" Margin="5,129,0,0" Name="LunarTextBlock" Text=" " VerticalAlignment="Top" FontSize="26" />
</Canvas>
백그라운드의 CS 코드는 다음과 같습니다.
public Tile()
{
InitializeComponent();
// ,
if (_365Settings.GetDateForTile().Date != DateTime.Today)
{
CreateAndModify();
}
}
public void CreateAndModify()
{
YearAndMonthTextBlock.Text = DateTime.Today.ToString("yyyy MM ");
DayTextBlock.Text = DateTime.Today.Day.ToString();
LunarTextBlock.Text = GetLunarString(DateTime.Today);
WriteableBitmap bitmap = new WriteableBitmap(CanvasForTile, null);
string tiledirectory = "Shared/ShellContent/tiles";//note : Shared/ShellContent
string tempJPEG = tiledirectory + @"/" + "LiveTile.jpg";
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!store.DirectoryExists(tiledirectory))
{
store.CreateDirectory(tiledirectory);
}
using (var stream = store.OpenFile(tempJPEG, System.IO.FileMode.OpenOrCreate))
{
bitmap.SaveJpeg(stream, 173, 173, 0, 100);
}
}
_365Settings.SetDateForTile(DateTime.Today);
ShellTile TileToFind = ShellTile.ActiveTiles.First();
StandardTileData data = new StandardTileData();
data.BackBackgroundImage = new Uri("isostore:/" + tempJPEG, UriKind.Absolute);
TileToFind.Update(data);
}
//
private string GetLunarString(DateTime date)
{
string str;
if (Holidays.TryGetSolarHoliday(date, out str))
{
return str;
}
if (Jieqi.TryGetJieqi(date, out str))
{
return str;
}
Lunar lunar = new Lunar(date);
if (Holidays.TryGetLunarHoliday(lunar, out str))
{
return str;
}
return lunar.MonthOrDayString();
}
이렇게 하면 데스크톱 스티커의 업데이트를 실현할 수 있다.
이 과정에서 몇 가지 기술 포인트가 사용됩니다.
1. 그림 그리기,grid에 컨트롤러,image 또는textblock을 추가합니다. 이렇게 하면 나중에 컨트롤러 속성만 수정하고 전체grid를 하나의 비트맵으로 변환할 수 있습니다.
WriteableBitmap bitmap = new WriteableBitmap(this.xamlGrid, null);
2. 사진 저장, 여기는 샌드박스 기술, 저장 위치는 시스템이 프로그램에 분배하는 구역, 사용자에게 보이지 않는
string tiledirectory = "Shared/ShellContent/tiles";//note : Shared/ShellContent
string tempJPEG = tiledirectory + @"/" + "LiveTile.jpg";
using (var store = IsolatedStorageFile.GetUserStoreForApplication())
{
if (!store.DirectoryExists(tiledirectory))
{
store.CreateDirectory(tiledirectory);
}
using (var stream = store.OpenFile(tempJPEG, System.IO.FileMode.OpenOrCreate))
{
bitmap.SaveJpeg(stream, 173, 173, 0, 100);
}
}
//..........
data.BackBackgroundImage = new Uri("isostore:/" + tempJPEG, UriKind.Absolute);
3. 프로세스 호출, 백그라운드 프로세스는 일반적으로 앞의 UI 작업을 호출할 수 없습니다. 비동기 프로세스를 만들어야 합니다. 아래의 방법으로 조작할 수 있습니다. 현재 안전성이 어떤지 알 수 없습니다.
Deployment.Current.Dispatcher.BeginInvoke(
() =>
{
Ui });
이상은 스티커 Tile 학습의 소감과 체험입니다. 스티커에 대해 파악하고 이해하는 것도 이렇기 때문에 배울 만한 새로운 내용이 없을 것입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
제한된 크기의 디렉토리를 만드는 방법오늘 저는 장치에 공간이 없을 때 백업 중에 응용 프로그램이 어떻게 작동하는지 테스트(및 수정)하는 작업이 있습니다. 결과적으로 "남은 공간 없음"오류로 백업이 실패하면 새 파일이 없어야 합니다. 지금까지 문제를 재...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.